給定兩個目錄c:\ foo和c:\ bar我想刪除c:\ bar中與c:\ foo中存在的文件相同的文件。我可以使用fc命令將c:\ bar中的每個文件與c:\ foo中的同名文件進行比較,並手動刪除重複項。有沒有簡單的方法來使用CMD自動執行此操作?使用Windows命令行刪除重複文件
回答
@echo off
cd c:\bar
for %%a in (*.*) do for %%b in ("c:\foo\%%a") do (
if exist "%%b" (
if "%%~Ta %%~Za" equ "%%~Tb %%~Zb" (
del "%%a"
) else (
fc "%%a" "%%b" > NUL
if not errorlevel 1 del "%%a"
)
)
)
如果兩個文件可能有不同的修改日期但是相同,請在比較中刪除%%~T..
零件。
謝謝,但我試着運行腳本,它似乎刪除*不*重複的文件,而不是那些。 – Fortranner
將「neq」替換爲「equ」並在errorlevel 1之前添加「not」使得代碼按照我想要的操作,謝謝。 – Fortranner
行動,你是對的!固定... – Aacini
如果相同裝置similar or alike in every way:在每方式,不僅在日期和大小,因此被迫二進制比較:
@ECHO OFF >NUL
SETLOCAL enableextensions
pushd "D:\bat\FooBar"
for /F "delims=" %%G in ('dir /B /A:-D *.*') do (
call :proFC "%%~fG" "D:\bat\FooFoo\%%~nxG"
)
popd
ENDLOCAL
goto :eof
:raiseerror
exit /B %1
:proFC
call :raiseerror 321
fc /B "%~1" "%~2" >NUL 2>&1
if %errorlevel% EQU 0 (
echo del "%~1"
) else (
echo %errorlevel% "%~2"
)
goto :eof
評論在上述腳本關鍵點:
pushd ...
個交換機當前工作目錄for /F ...
環對待酒吧文件夾的靜態文件列表call :proFC ...
與正確引用line arguments parameters
popd
切換當前工作目錄回到goto :eof
結束腳本
:raiseerror
子程序經由exit /B %1
:proFC
生產子程序返回退出代碼
call :raiseerror 321
重要作爲For an invalid switch (with two passed files) an error message is printed but theerrorlevel
is not changedfc /B "%~1" "%~2" >NUL 2>&1
輸出和錯誤消息給redirectedNUL
作爲錯誤級別是很重要的;if %errorlevel% EQU 0 (
echo del "%~1"
文件刪除僅僅_echo_ed用於調試目的
) else (
echo %errorlevel% "%~2"
調試目的(見下文)。從子程序
goto :eof
返回
FC
將設置一個ErrorLevel
如下(但看到一則說明在call :raiseerror 321
點):
-1 Invalid syntax (e.g. only one file passed)
0 The files are identical.
1 The files are different.
2 Cannot find at least one of the files.
- 1. 使用命令行檢查刪除文件/重命名文件/移動文件到TFS使用命令行
- 2. 使用awk命令刪除帶有CRLF的重複文件
- 3. 如何刪除前綴爲使用Windows命令行文件
- 4. 刪除重複行並覆蓋相同命令中的文件
- 5. 使用Windows命令行連接文本文件,刪除前導行
- 6. 無法通過Windows命令行重命名複製的文件
- 7. 使用mv命令 - 文件被刪除?
- 8. 使用命令行從文本文件中刪除行
- 9. Windows命令行復制文件
- 10. 使用Windows REN命令從文件名中刪除前綴
- 11. 使用Windows命令提示符刪除文件
- 12. Windows Cmd行刪除命令刪除除一個以外的所有文件
- 13. Unix命令刪除重複名稱
- 14. 刪除重複的shell命令
- 15. MySQL的膩子命令刪除重複
- 16. 無法使用SOURCE命令運行sql文件windows命令行
- 17. 如何使用命令行從文件中刪除行?
- 18. 使用ant刪除重複文件?
- 19. 使用Awk刪除重複文件
- 20. 使用Windows批處理文件複製文件並刪除重複項
- 21. 修改重複行刪除,訂單保留,單行awk命令
- 22. 命令行復制或刪除
- 23. 如何使用shell()命令從Windows文件夾中刪除文件
- 24. 文件重命名/刪除
- 25. 如何使用linux命令行刪除文件夾
- 26. 通過命令行查找並刪除未使用的文件
- 27. 使用命令行刪除文件圖標
- 28. Windows重命名子文件夾命令
- 29. 刪除CSV文件中的重複行
- 30. 使用單行命令刪除目錄
最簡單的方法與一批要做到這一點文件是編寫一個Powershell腳本並從批處理文件中調用它。 –
你的意思是'批處理文件'或'命令行'? – Endoro
批處理文件或我可以從命令行執行的一行代碼都很好。 – Fortranner