【问题标题】:I need to create a list of folders that contain a specific file type with a batch file我需要使用批处理文件创建包含特定文件类型的文件夹列表
【发布时间】:2015-02-02 15:47:37
【问题描述】:

我正在尝试使用批处理文件生成包含特定文件类型的位置中的仅文件夹列表,我们将其命名为 *.abc

目前我只知道如何将 DIR 命令输出回显到名为 folder.lst 的文件中,我想对此进行扩展并尝试

a) 仅将包含 *.abc 文件类型的文件夹回显到 folder.lst b) 删除 folder.lst 中不包含 *.abc 文件类型的文件夹的引用。

我还尝试让 FOR 循环检查每一行以查看该位置是否存在 *.abc 文件,如果不存在则跳过它,但我无法让它工作,这是我所拥有的一个示例.

setlocal enableextensions enabledelayedexpansion

FOR /F "delims=" %%C in (folder.lst) do (
set temp=%%C
if not exist !temp!\*.abc (goto skip) else (goto resume)
:resume

那么我的行动就在这里

:skip
)

但我知道我在这里做错了什么......我只是不知道是什么。

【问题讨论】:

  • 告诉我们什么不起作用。是否有任何错误信息?你期望会发生什么?究竟发生了什么?

标签: batch-file cmd


【解决方案1】:

也许for 命令的/R 形式会有所帮助:

for /r "basedir" %%a in (.) do if exist "%%~a\*.abc" (
    echo %%a contains .abc file(s)
)

%%a 将是您想要的目录(带有尾随 \.,但您应该能够不关心或适应它)。

【讨论】:

    【解决方案2】:

    您发布的此类脚本存在问题,您无法在块语句中使用标签。您也没有提供任何示例。

    @ECHO OFF
    SETLOCAL ENABLEDELAYEDEXPANSION
    SET "sourcedir=U:\sourcedir"
    SET "lastdir="
    FOR /r "%sourcedir%" %%a IN (*.abc) DO IF "!lastdir!" neq "%%~dpa" (
     SET "lastdir=%%~dpa"
     ECHO %%~dpa
     echo "!lastdir:~0,-1!"
    )
    GOTO :EOF
    

    找到的每个目录都将被 echoed 两次 - 一次带有尾随 \,一次没有。

    您需要更改sourcedir 的设置以适应您的情况。

    【讨论】:

      【解决方案3】:
      @echo off
          setlocal enableextensions disabledelayedexpansion
      
          set "root=%cd%"
      
          for %%a in ("%root%") do for /f "delims=: tokens=2" %%b in ('
              dir /a-d /s "%root%\*.abc" ^| find "\"
          ') do echo(%%~da%%~pnxb
      

      这将执行递归dir 命令,在起点下搜索指定的文件类型(更改root 变量以满足您的需要)。对于每个找到的文件夹,我们从文件列表(包含反斜杠的行)前面的 dir 标题中检索文件夹。

      为了将路径与行中的其余信息分开,冒号用作分隔符。由于这会将驱动器排除在检索信息之外,因此使用附加的for 从文件夹引用中检索驱动器。

      【讨论】:

        【解决方案4】:

        从命令行

        for /f "delims=" %a in ('dir /s /b *.abc') do echo %~dpa >> folders.lst
        

        在批处理文件中

        for /f "delims=" %%a in ('dir /s /b *.abc') do echo %%~dpa >> folders.lst
        

        上述命令只会将包含*.abc 文件的文件夹名称放在folders.lst 中。

        注意事项

        • 在批处理文件中使用该命令时,应将% 替换为%%

        • %~dpa~dp 部分仅将 %a 扩展为驱动器号和路径。如果您不想要驱动器号,请删除 dp 路径包含一个尾随 \,某些命令可能会将其解释为转义字符。

        • 以上命令在当前目录中开始搜索。要从当前驱动器的根目录搜索,您可以先执行cd \

        有关详细信息,请参阅 FOR /F Loop command: against the results of another commandParameters

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-02-18
          • 1970-01-01
          • 2011-12-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多