3
我試圖使用批處理腳本從目錄及其子目錄中刪除所有非代碼文件。使用命令提示符我可以驗證腳本的結果,但腳本執行時不會執行預期的操作。如何刪除批處理文件中的文件列表
for /F %%F in ('dir /s /b /a-d ^| findstr /vile ".c .cpp .h .hpp"') do if "%%~fF" neq "%~f0" del /S /Q "%%F"
在提取並執行下面的命令,產生的路徑是正確的:
dir /s /b /a-d | findstr /vile ".c .cpp .h .hpp"
然而,通過批處理文件執行時,它被髮送到「刪除/ S/Q得到的路徑「 %% F「'命令是第一個子目錄。
以下是命令提示輸出的比較和批處理文件輸出(與由回波取代del命令)
控制檯:
C:\testdata\delete_test>dir /s /b /a-d | findstr /vile ".c .cpp .h .hpp"
C:\testdata\delete_test\delete_non_code_files.bat
C:\testdata\delete_test\delete_test - Copy\7328_log.txt
C:\testdata\delete_test\delete_test - Copy\7588_log.dat
C:\testdata\delete_test\delete_test - Copy\7964_log.txt
C:\testdata\delete_test\delete_test - Copy\8860_log.txt
C:\testdata\delete_test\delete_test - Copy (2)\7328_log.txt
C:\testdata\delete_test\delete_test - Copy (2)\7588_log.dat
C:\testdata\delete_test\delete_test - Copy (2)\7964_log.txt
C:\testdata\delete_test\delete_test - Copy (2)\8860_log.txt
C:\testdata\delete_test\delete_test - Copy (3)\7328_log.txt
C:\testdata\delete_test\delete_test - Copy (3)\7588_log.dat
C:\testdata\delete_test\delete_test - Copy (3)\7964_log.txt
C:\testdata\delete_test\delete_test - Copy (3)\8860_log.txt
批處理文件:
C:\testdata\delete_test>delete_non_code_files.bat
/S /Q "C:\testdata\delete_test\delete_test"
/S /Q "C:\testdata\delete_test\delete_test"
/S /Q "C:\testdata\delete_test\delete_test"
/S /Q "C:\testdata\delete_test\delete_test"
/S /Q "C:\testdata\delete_test\delete_test"
/S /Q "C:\testdata\delete_test\delete_test"
/S /Q "C:\testdata\delete_test\delete_test"
/S /Q "C:\testdata\delete_test\delete_test"
/S /Q "C:\testdata\delete_test\delete_test"
/S /Q "C:\testdata\delete_test\delete_test"
/S /Q "C:\testdata\delete_test\delete_test"
/S /Q "C:\testdata\delete_test\delete_test"
爲什麼我的%% F變量指向一個文件,因爲'for/F'會導致它執行?
您的解釋讓我放心。我肯定會將它粘貼到bat文件中並保留它,儘管在放棄對Windows批處理的試錯調試後,我使用C++和Boost來執行此任務:) – Patillac