我需要创建一个包含特定文件类型和批处理文件的文件夹列表

时间:2015-02-02 15:47:38

标签: batch-file cmd

使用批处理文件我试图在包含特定文件类型的位置生成仅包含文件夹的列表,让我们调用它* .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
)

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

4 个答案:

答案 0 :(得分:0)

/R命令的for形式可能会有所帮助:

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

%%a将是您想要的目录(尾随\.,但您应该无需关心或适应此目的。)

答案 1 :(得分:0)

从命令行

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个文件的文件夹名称。

备注

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

  • ~dp的{​​{1}}部分仅将%~dpa扩展为驱动器号和路径。如果您不想要驱动器号,请删除%ad路径包含尾随p,可能会被某些命令解释为转义字符。

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

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

答案 2 :(得分:0)

您发布的脚本存在问题,您可以在块语句中使用标签。您还没有提供任何示例。

@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

找到的每个目录都会echo两次 - 一个包含尾随\,另一个没有。

您需要更改sourcedir的设置以适合您的具体情况。

答案 3 :(得分:0)

@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标题中检索文件夹(包含反斜杠的行)。

要将路径与行中的其余信息分开,冒号将用作分隔符。由于这会使驱动器脱离检索到的信息,因此使用aditional for从文件夹引用中检索驱动器。