如何使用批处理脚本从 "Output" 文件夹中删除所有文件?

How to delete all files from "Output" folder using batch script?

我的文件夹结构如下:

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”(输出文件夹的最后一个路径)中的文件。如何递归地做...?或者是否有任何数组概念来存储存在 output 文件夹的所有路径?

我发现您的代码存在三个问题。

首先,for循环没有找到FolderPath下的output子目录,而是遍历了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 循环,在每次迭代中,只是 sets Folder 变量,它不会调用 del 命令,即放置在循环之外。

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

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

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

列出名为 Output:

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

删除名为 Output:

的目录中的所有文件
find . -name Output -type d|find -type f -exec rm {} \;