【问题标题】:Batch : Search Directory in every Directory and Subdirectory批处理:在每个目录和子目录中搜索目录
【发布时间】:2016-04-18 12:37:58
【问题描述】:

我想删除所有具有特定名称的目录。例如。 “供应商”

D:\Data\Project1\Dir\vendor

D:\Data\Project2\AnotherDir\AnotherDir\vendor

D:\Data\Project3\vendor

这就是我此刻所拥有的。这会列出所有文件夹和子文件夹。

for /d %%a in (*) do dir /ad /on /s /b %%a

现在我希望将一个路径放入变量中,并检查目录是否等于名称(例如“vendor”)。但我找不到方法。

你能帮帮我吗?

问候, 德米安

【问题讨论】:

    标签: windows batch-file directory


    【解决方案1】:

    如果您安装了 RimRaf,这是我的工作解决方案:

    @ECHO off
    
    setlocal enableDelayedExpansion
    
    :: Folders where the batch program doesn't need to search.
    set skipTheseFolders=Decleir Pinokkio
    
    :: All the folders that need to be deleted
    set foldersToDelete=vendor node_modules
    
    
    for /d /r %%d in (*.*) do (
    
        @ECHO %%d
    
        set folder=%%~nxd
        set canI="true"
    
        :: For loop to skip folders
        for %%s in (%skipTheseFolders%) do (
            :: Need to be implemented
            set canI="true"
        )
    
        IF !canI! =="true" (
            for %%l in (%foldersToDelete%) do (
                :: If the folder is one of the folders To Delete    
                IF "!folder!" == "%%l" (
                    @echo %%d
                    cd %%d
                    cd ..
                    :: Using Rimraf because when you delete node_modules, normal delete won't work
                    start /B rimraf !folder!
                )
            )
        )
    )
    

    【讨论】:

      【解决方案2】:

      DIR 命令有一个不幸的限制,它不能递归地列出特定的文件夹名称。最简单的解决方案是列出所有文件夹,并使用 FINDSTR 过滤掉除匹配文件夹之外的所有文件夹。

      dir /ad /on /s /b | findstr /iec:"\vendor"
      

      然后您只需使用 FOR /F 迭代结果并添加您的 RD 命令

      for /f "eol=: delims=" %%F in
        'dir /ad /on /s /b ^| findstr /iec:"\vendor"'
      ) do rd /s /q "%%F" 2>nul
      

      【讨论】:

      • @Hackoo - 是的,谢谢。这就是我的意图。全部固定。
      【解决方案3】:

      你可以试试这个:

      @Echo OFF
      set "Folder=D:\Data"
      set "FolderString=vendor"
      Setlocal Enabledelayedexpansion
      FOR /f "tokens=*" %%F IN ('dir /b /s /ad %Folder%\ ^| find "%FolderString%"') DO (set var="%%F" 
      ECHO rd /s /q !var! && rd /s /q !var!) 
      EndLocal
      pause
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-11-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-06-13
        • 1970-01-01
        • 2021-10-29
        相关资源
        最近更新 更多