2013-10-31 52 views
2

我想要一个脚本,以便我的文件从一个文件夹移动到另一个文件夹,并创建一个新文件(如果有任何文件已存在)。批处理脚本移动文件而不覆盖

例如,我在Downloads文件夹中有一个文件test.csv。当我运行下面的脚本时,如果覆盖文件,如果在downloads1文件夹中存在具有相同名称的任何文件。

但我想,它不应该覆盖现有的文件,但两个文件应该在那里..可能是它改变了name.adds 1,2后面。

move C:\user\Downloads\*.csv C:\user\downloads1\ 

另外我知道使用/ -Y会问我需要重写。但我想自动执行此操作。

move /-Y C:\user\Downloads\*.csv C:\user\downloads1\ 

回答

3

最简单的方法:

echo No|move /-Y .\file1 .\file2 

您可以使用通配符也:

echo NO|move /-Y "C:\user\Downloads\*.csv" "C:\user\downloads1\" 

而且你的情况:

for %%f in ("C:\user\Downloads\*.csv") do (
    echo No|move /-Y "%%~dpfnxf" "C:\user\downloads1\" 
) 

编辑:

for %%f in ("C:\user\Downloads\*.csv") do (
    if exist "C:\user\downloads1\%%~nxf" (
     rem move "C:\user\downloads1\%%~nxf" "C:\user\downloads1\%%~nxf.bkp" 
     move "C:\user\downloads1\%%~nxf" "C:\user\downloads1\%%~nf-%%N.%%~xf" 
) 
    move /Y "%%~dpfnxf" "C:\user\downloads1\" 
) 

检查也这样:Copy files without overwrite

还有一个编辑:

setlocal enableDelayedExpansion 
for %%f in ("C:\user\Downloads\*.csv") do (
    set "moved=" 
    if exist "C:\user\downloads1\%%~nxf" (
    for /l %%N in (1,1,50) do (
    if not defined moved if not exist "C:\user\downloads1\%%~nxf.%%N" (
     move "C:\user\downloads1\%%~nxf" "C:\user\downloads1\%%~nxf.%%N" 
     set moved=yes 
    ) 
    ) 

) 
    move /Y "%%~dpfnxf" "C:\user\downloads1\" 
) 
endlocal 

未经测试。

1

您可以移动第一个不存在的文件,然后重命名源目录中的剩余文件,然后复制到目标。

@echo off 
    setlocal enableextensions enabledelayedexpansion 

    rem configure directories 
    set "source=c:\user\Downloads" 
    set "target=c:\user\Downloads1" 

    rem move non existing files to target 
    call :doMove  

    rem if we still have files 
    if exist "%source%\*.csv" (

     rem generate a timestamp 
     set timestamp=_%date:/=%_%time::=% 
     set timestamp=!timestamp:,=! 

     rem rename the remaining files with timestamp 
     ren "%source%\*.csv" "*.!timestamp!.csv" 

     rem and move the remainig files to target 
     call :doMove 
    ) 

    endlocal 
    exit /b 

:doMove 
    robocopy "%source%" "%target%" "*.csv" /fp /njh /njs /ndl /xc /xn /xo /xx /mov 
    goto :EOF 
+0

非常感谢你..很好的解决方案.. :) :) – user2034816