刚开始编写批处理文件,但需要帮助构建一个批处理文件来搜索和删除特定名称的所有子文件夹

刚开始编写批处理文件,但需要帮助构建一个批处理文件来搜索和删除特定名称的所有子文件夹

我需要一个简单的批处理文件,它可以搜索包含多个文件夹(名称各异)的“F:\Temp”目录,查找名为“Subs”的子文件夹,并删除它们以及“Subs”文件夹可能包含的任何文件。使用此处的类似问题,我构建了以下脚本,但似乎找不到目录中的“Subs”文件夹。

for /f %%i in ("F:\Temp\***\Subs") do rd /s "%%~i"

需要注意的是,我不知道/f %%i和 有什么关系%%~i。另外,我不确定我的通配符是否设置正确。需要说明的是,下面的文件夹F:\Temp名称各异,没有相似之处。我唯一想查找和删除的是Subs中这些名称各异的文件夹中的子文件夹F:\Temp

答案1

我想删除Subs目录中命名的子目录F:\Temp

以下应该有效:

@echo off
setlocal enabledelayedexpansion
cd /d f:\Temp
for /f "tokens=*" %%i in ('dir /a:d /b /s Subs') do (
  echo "%%i"
  rem rd /s "%%i"
  )

检查输出,如果它与正确的子目录匹配,则删除rem之前的内容。rd

我不/f %%i知道

它是命令的参数for

FOR 命令的操作可以概括为......

  • 取一组数据
  • 使FOR参数%%G等于该数据的某一部分
  • 执行命令(可选择使用参数作为命令的一部分)。
  • 对每一项数据重复上述步骤

For - 循环命令 - Windows CMD - SS64.com完整解释

随着%%~i

这毫无意义

我不确定我的通配符F:\Temp\***\Subs是否设置正确

子目录名称中间不能有通配符。它们必须位于末尾。


进一步阅读

答案2

您还可以使用以下方式执行此操作For /R [Folder] /D

@echo off

for /r "F:\Temp" /d %%i in (*Subs
    )do echo\%%~nxi & rmdir /s /q "%%~dpnxi"


观察:为了确保要删除的文件夹包含字符串,而不是名称中\Subs包含该字符串的其他文件夹,我建议使用以下命令进行过滤:subs| find "\Strings"

for...()do echo\%%~dpi%%~nxi | find /i "\Subs" && run rd ...
  • 您的批处理将仅删除在字符串的路径和名称中找到的文件夹\Subs,并且您的批处理将如下所示:
@echo off

for /r "F:\Temp" /d %%i in (*Subs)do (
     echo\%%~dpi%%~nxi | find /i "\Subs" && rd /s /q "%%~dpnxi"
    )


熟悉以下命令将会对你有所帮助:


For
For /r 
For /d
For loop expanding variables

  • 使用For循环可以扩展变量:
    %~i   - expands %i removing any surrounding quotes (")
    %~fi  - expands %i to a fully qualified path file/dir name only
    %~ni  - expands %i to a file/dir name only
    %~xi  - expands %i to a file/dir extension only
    
    %%~nxi => expands %%~i to a file/dir name and extension
  • Use the FOR variable syntax replacement:
        %~pi        - expands %i to a path only
        %~ni        - expands %i to a file name only
        %~xi        - expands %i to a file extension only
  • The modifiers can be combined to get compound results:
        %~pni       - expands %i to a path and file name only
        %~pnxi      - expands %i to a path, file name and extension only

观察.: 关于使用%%~nxidirectory名称观察注释中ss64.com

  • Full Stop Bug
    Although Win32 will not recognise any file or directory name that begins or ends 
       with a '.' (period/full stop) it is possible to include a Full Stop in the middle
       of a directory name and this can cause issues with FOR /D.
  • Parameter expansion will treat a Full Stop as a file extension, so for a directory
    name like "Sample 2.6.4" the output of %%~nI will be truncated to "Sample 2.6" to
    return the whole folder name use %%I or %%~nxI

所有for /d目录都会在循环中列出,并且它们的源名称将在中%%~nxi,可以在echo\%%~nxi & rmdir /s /q "%%~dpnxi"命令语法中使用。


相关内容