我想寫一個批處理文件,它將刪除兩個文件夾之間的文件重疊。我該如何編寫一個批處理文件來刪除其他目錄中存在的所有文件?
換句話說,我希望它說「從文件夾A中刪除也出現在文件夾B中的所有文件」。
從一個SQL來看,它會像
DELETE FROM FOLDERA WHERE EXISTS(SELECT FILE FROM FOLDERB)
,但我要完成的是在windows文件系統。
我想寫一個批處理文件,它將刪除兩個文件夾之間的文件重疊。我該如何編寫一個批處理文件來刪除其他目錄中存在的所有文件?
換句話說,我希望它說「從文件夾A中刪除也出現在文件夾B中的所有文件」。
從一個SQL來看,它會像
DELETE FROM FOLDERA WHERE EXISTS(SELECT FILE FROM FOLDERB)
,但我要完成的是在windows文件系統。
SET if_it_exists_here=C:\folderB
SET then_delete_it_there=C:\folderA
CD "%if_it_exists_here%"
FOR %%A IN (*.*) DO (
IF EXIST "%then_delete_it_there%\%%~nxA" DEL /Q /F %then_delete_it_there%\%%~nxA
)
回答我的問題:
set if_it_exists_here=C:\folderB
set then_delete_it_there=C:\folderA
cd "%if_it_exists_here%"
FOR /F "tokens=*" %%G IN ('dir *.* /b /a:-d') DO del "%then_delete_it_there%\%%G"
我想它的文件總是存在於folderA和folderB? – Mechaflash
不,不一定。如果沒有重疊,那麼腳本不會刪除任何內容。 – JosephStyons
大廈由Mechaflash答案,這裏是與UNC路徑工作的版本。
SET if_it_exists_here=\\server1\some\folder
SET then_delete_it_there=\\server2\some\folder
CD "%if_it_exists_here%"
FOR %%A IN ("%if_it_exists_here%\*.*") DO (
IF EXIST "%then_delete_it_there%\%%~nxA" DEL /Q /F %then_delete_it_there%\%%~nxA
)
這是一個有趣的選擇。這種方法有什麼特別的優勢嗎? – JosephStyons
這只是在刪除文件之前查找文件,而不是假設文件存在並將其刪除。所以用'2>'重定向應該是乾淨的。我總是測試重定向'2> file> file2',以確保代碼沒有任何問題,並讓它返回「找不到文件」給STDERR令人討厭= /。只是nitpicky。 – Mechaflash
偉大的觀點,我想我會用這個而不是我自己的。我懷疑它也會在大量文件中表現更好。 – JosephStyons