2013-02-22 116 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 
相关问题