如何使用批处理脚本从“输出”文件夹中删除所有文件?

时间:2015-11-19 09:36:33

标签: batch-file batch-processing

我有一个文件夹结构如下:

L:\MyProject\Extract\
                    Activity    Input
                                **output**
                                SSIS
                                Results
                                Headers
                    Account     Input
                                **output**
                                SSIS
                                Results
                                Headers
                    Balance     Input
                                **output**
                                SSIS
                                Results
                    .
                    .
                    .

在这里,我需要找到输出文件夹并删除每个“output”文件夹中的所有文件。我正在使用以下脚本:

SET FolderPath=%1

for /f "usebackq" %%a in (`"dir %FolderPath% /ad/b/s output"`) do SET Folder="%%a"
del %Folder%\*.* /Q

但是使用上面的脚本,我可以删除“%% a”中存在的文件(输出文件夹的最后一个路径)。怎么递归...?或者是否有任何数组概念来存储输出文件夹存在的所有路径?

2 个答案:

答案 0 :(得分:1)

我在你的代码中看到了三个问题。

首先,for循环找不到output下的FolderPath子目录,但迭代FolderPath的所有子目录。

解决此问题的一种方法是指定

for /f "usebackq" %%a in (`dir "%FolderPath%\output" /ad/b/s`) do 

请注意,我已经移动了引号,只是为了准备带空格的名称,这是你的第二个问题。您可以使用

进一步简化它
for /f "usebackq delims=" %%a in (`dir "%~1\output" /ad/b/s`) do 

请注意delims避免空格作为分隔符而%~1删除参数的引号

最后,for循环在每次迭代中只是set Folder变量,它不会调用del命令,该命令位于环。

解决此问题的一种简单方法是在del上调用%%a命令而不设置变量folder

for /f "usebackq delims=" %%a in (`dir "%~1\output" /ad/b/s`) do del %%a\* /q

答案 1 :(得分:0)

您可以使用true命令查找当前目录的所有子目录。

列出名为find的所有目录中的文件:

Output

删除名为find . -name Output -type d|find -type f -exec ls {} \; 的目录中的所有文件:

Output