![批量文件複製和移動而不覆蓋](https://rvso.com/image/1400013/%E6%89%B9%E9%87%8F%E6%96%87%E4%BB%B6%E8%A4%87%E8%A3%BD%E5%92%8C%E7%A7%BB%E5%8B%95%E8%80%8C%E4%B8%8D%E8%A6%86%E8%93%8B.png)
我正在嘗試創建一個批次文件(在後台運行),該文件將複製單個文件,而不覆蓋目標中具有相同名稱的任何文件,然後移動該文件,如果目標中存在文件,則再次不覆蓋同名目的地?
我現在正在使用這個,但它被覆蓋了。
copy %1 dest
move %1 dest
答案1
請嘗試這個。它適用於單一文件。
迴聲N |複製/-Y 文件1 文件2
迴聲N |移動/-Y 文件1 文件2
有趣的是,它似乎也適用於通配符。我在 x64 Windows 7 上進行了測試。
答案2
我不清楚移動剛剛複製的相同檔案是什麼意思,但為了測試檔案是否存在,請在批次腳本中使用「IF」語句,如下所示。 (我在下面更詳細地解釋了 %~ 。)
IF EXIST %~dp2%~nx1 (echo file exists) ELSE (
robocopy %~dp1 %~dp2 %~nx1 /XN /XO /MOV>>testing.txt)
以下內容適用於 Windows 7、Windows 8、Windows Server 2008、Windows Server 2008 R2、Windows Server 2012。
(對於 XP,您必須從資源工具包中獲取它,但是哦,該寶石的壽命不只有 30 天:))
只有當目標檔案不存在時,以下程式碼才會將檔案從來源目錄複製到目標目錄。
robocopy source_path dest_path filename /XN /XO
新增 /MOV 將移動檔案。
如果你想使用參數,命令將是這樣的:
copyscript.bat C:\Dir1\filename.ext D:\path2\
copyscript.bat 看起來是這樣的:
robocopy %~dp1 %~dp2 %~nx1 /XN /XO
如果要將輸出傳送到日誌,請新增 >>logfile.txt,如下所示:
robocopy %~dp1 %~dp2 %~nx1 /XN /XO>>logfile.txt
如果您想移動文件而不是複製,則如下所示:
robocopy %~dp1 %~dp2 %~nx1 /XN /XO /MOV
- %~dp1 相當於第一個參數的目錄和路徑
- %~dp2 相當於第二個參數的目錄和路徑
- %~nx1 等於第一個參數的檔名和副檔名
- /XN 在複製過程中排除較新的文件
- /XO 在複製過程中排除較舊的文件
- /MOV 移動文件而不僅僅是複製
將輸出結果附加到檔案而不是cmd視窗(如果您想每次都覆蓋日誌,則僅使用一個>)
- 預設情況下,如果日期時間戳相同,robocopy 不會覆蓋檔案。
Simon Sheppard 的網站是一個很好的批次腳本資源,參數的語法在這裡。 http://ss64.com/nt/syntax-args.html
微軟的 robocopy 資訊在這裡http://technet.microsoft.com/en-us/library/cc733145.aspx