我有三个目录,每个目录包含8个子目录,每个子目录包含2个我想删除的文件夹。
结构:
[编辑路径名]
C:/Process/CIM
/AB_CIM
/LOG
/DATA
/CC_CIM
/LOG
/DATA
/CIM_RD
...
...
C:/Process/DIM
/AB_DIM
/LOG
/DATA
/CC_DIM
/LOG
/DATA
/DIM_RD
...
...
C:/Process/RRS
...
所以基本上我想在所有这些子目录中删除LOG
和DATA
。我想过使用两个单独的批处理文件***:
第一个批处理文件包含:
call secondBatchFile.cmd CIM
call secondBatchFile.cmd DIM
call secondBatchFile.cmd RRS
现在,我不确定如何编写第二个批处理文件,因为这些子目录具有不同的名称(但是常见的部分:AB_ *,CC_ *,* _RD等)。我想知道是否有人可以帮助我。
提前感谢您的帮助。
***使用两个单独的批处理文件执行此操作的原因是我有时可能需要为其中一个父目录(例如CIM)保留LOG
和DATA
,所以这样我只能注释掉第一批文件中的一行,然后运行它。
答案 0 :(得分:1)
如果您确信不会拾取其他目录中的LOG和DATA文件夹,则可以执行此类操作。在下面的代码中注释掉实际删除,并在执行前查看.dat
文件输出。
REM Output all LOG and DATA sub-directories into corresponding DAT files
dir /ad/s/b log* > log_directories.dat
dir /ad/s/b data* > data_directories.dat
REM remove every entry listed in log_directories.dat
for /f %%i in (log_directories.dat) do rd/s %%i
REM remove every entry listed in data_directories.dat
for /f %%i in (data_directories.dat) do rd/s %%i
如果你从C:
运行它,你可能会得到你不想要的目录。但假设您的所有目标都分组在一个专用的子目录下(假设您从该专用目录运行.bat
),这将不会有问题。
默认情况下,此解决方案为您提供所需的日志,记录它将删除的目录(尽管每次运行都会覆盖日志)。
答案 1 :(得分:1)
如果8个子文件夹始终是相同的模式,即AB_*, CC_*, *_RD,
等,则第二个批处理文件可能类似于:
cd C:\%1%
rmdir AB_%1%\LOG
rmdir AB_%1%\DATA
rmdir CC_%1%\LOG
rmdir CC_%1%\DATA
rmdir %1%_RD\LOG
rmdir %1%_RD\DATA
...
cd c:\