使用bat脚本仅在子文件夹中删除文件

时间:2019-05-02 13:17:22

标签: windows batch-file scripting windows-scripting

我正在尝试删除Jenkins主目录的嵌套子目录中的文件,但不删除嵌套子目录之外的任何文件。

这是目录结构。

└───Jenkins_Home
    └───Jobs
        ├───Job1
        │   │   ot1.xml
        │   │
        │   └───fileParams
        │           sample1.war
        │
        ├───Job2
        │       ot2.xml
        │
        └───Job3
            │   ot3.xml
            │
            └───fileParams
                    sample2.war

我要删除的文件是sample1.warsample2.war,但不是ot1.xmlot2.xmlot3.xml

我尝试了以下方法,但是这些方法正在删除每个* .txt文件。

方法1:

cd C:\Users\Kris\Desktop\MINE\Jenkins_home\jobs\**\fileParams
del /s /q *.war

方法2:

cd C:\Users\Kris\Desktop\MINE\Jenkins_home\jobs\**\**
del /s /q *.war

方法3:

cd C:\Users\Kris\Desktop\MINE\Jenkins_home\jobs\**
del /s /q *.war

几乎有100种这样的目录结构,我不想求助于手动方法。

满足上述要求的正确方法/脚本是什么?

  

PS:我想每晚在Jenkins中使用cron计划运行此作业。出于审计目的,我无法删除作业,但是可以删除构建的工件,以保持jenkins主目录的清晰。

2 个答案:

答案 0 :(得分:1)

在cmd行中使用:

for /R "C:\Users\Kris\Desktop\MINE\Jenkins_home\jobs" %A in (fileParams) do @if exist "%A\*.war" @echo Del %A\*.war

在批处理文件中

@Echo off
for /R "C:\Users\Kris\Desktop\MINE\Jenkins_home\jobs" %%A in (fileParams
    ) do if exist "%%A\*.war" echo Del %%A\*.war

示例输出:

Del C:\Users\Kris\Desktop\MINE\Jenkins_home\jobs\Job1\fileParams\*.war
Del C:\Users\Kris\Desktop\MINE\Jenkins_home\jobs\Job3\fileParams\*.war

如果输出看起来正常,请删除echo

答案 1 :(得分:1)

由于您打算从中删除文件的目录中只有.war个文件,因此您可以运行for /R循环从包含相关目录的最高文件夹jobs中进行递归:

@echo off
for /R "C:\Users\Kris\Desktop\MINE\Jenkins_home\jobs\" %%i in (*.war) do echo del /Q "%%~fi"

一旦确信您需要在屏幕上显示输出,只需删除echo