2013-02-22 105 views
1

那麼我現在要做的是進入每個文件夾下面的目錄批量刪除文件夾中的所有文件使用通配符路徑

"C:\Documents and Settings\" 

,並在它的每一個文件夾中,無論名稱,檢查該路徑存在

"C:\Documents and Settings\*\Local Settings\Application Data\CSMRpt\" 

,如果它存在,然後刪除該導演內的所有TXT文件,如果路徑不存在,那麼什麼也不做,並移動到下一個文件夾內的「C:\文件和「設置」

這是我想出了迄今:

set PATH = "\Local Settings\Application Data\CSMRpt\" 
set FILETYPE = "*.txt" 
for /d %%g in ("C:\Documents and Settings\*") do if exist %%g%PATH% goto pathexists 
:pathexists 
del %%g%PATH%%FILETYPE% 

回答

3

試試這個。

@echo off 
setlocal 
set cwd=%CD% 
set p=Local Settings\Application Data\CSMRpt 
cd /d "c:\Documents and Settings\" 
for /d %%I in (*) do (
    if exist "%%I\%p%\" (
     pushd "%%I\%p%\" 
     del /q *.txt 
     popd 
    ) 
) 
:: (change back to original directory) 
cd /d "%cwd%" 
+1

你可以有'cd'更改驅動器以及'cd/D fullpath' – 2013-02-22 17:15:48

+0

@PatrickMeinecke - 謝謝。我實施了你的建議。 – rojo 2013-02-22 17:20:04

+0

謝謝你的完美! – SOfanatic 2013-02-22 17:38:09

2

有兩件事情錯在這裏,你可以不必在set命令=周圍空間,使用goto不會通過變量(但是你可以使用電話,而不是和它傳遞的參數)你不需要引用每個變量,%PATH%雖然你可以重置它,但你不應該這樣做,因爲它是一個環境變量。

更正代碼:

set THEPATH=\Local Settings\Application Data\CSMRpt\ 
set FILETYPE=*.txt 
for /d %%g in ("C:\Documents and Settings\*") do if exist "%%g%THEPATH%." del "%%g%THEPATH%%FILETYPE%" 

如果你真的不想for環路是一條線,你能做到這一點,以及

set THEPATH=\Local Settings\Application Data\CSMRpt\ 
set FILETYPE=*.txt 
for /d %%g in ("C:\Documents and Settings\*") do if exist "%%g%THEPATH%." call :deltxtfiles "%%~g" 

exit /B 

:deltxtfiles 
del "%~1%THEPATH%%FILETYPE%" 
goto:eof 
相關問題