【问题标题】:Batch: find all files with exclude part of the name批处理:查找名称中包含排除部分的所有文件
【发布时间】:2014-04-07 14:35:07
【问题描述】:

我需要找到所有 * .avi 文件(即使在子文件夹中)。但我想排除具有特定名称部分的文件(* demux.avi)。像这样的:

FOR /R %%g IN (*.avi) DO ( 
   if "%%g"=="*demux.avi" (      - THIS PART IS WRONG
       echo "%%g" excluded
  ) else (
       echo "%%g"
   )
)

我期待结果:

file1.avi
排除 file1 demux.avi
文件 2.avi
**

【问题讨论】:

    标签: batch-file for-loop filenames


    【解决方案1】:

    试试这个:

    FOR /F %%g IN ('dir /b /s "*.avi"^|find /i /v "demux"') DO ( whatever )
    

    我们基本上是说在此文件夹和子文件夹中查找所有 avi 文件并通过管道查找。 使用 finds /V 开关查找所有不包含“demux”的行并在它们上运行您的命令。

    【讨论】:

    • 非常感谢。效果很好。很有帮助。
    【解决方案2】:

    像这样:

    @echo off&cls
    for /f "delims=" %%a in ('dir /b/a-d *.avi') do (echo %%a | find "demux" && echo %%a [Excluded] || echo %%a [OK])
    

    代替 echo %%a [Excluded] 或 echo %%a [OK] 你可以做你想做的事 (DEL, REN,MOVE,...)

    编辑:

    当您使用/S 选项DIR 时只有文件名

    @echo off&cls
    for /f "delims=" %%a in ('dir /s/b/a-d *.avi') do (echo %%~na | find "demux" && echo %%~na [Excluded] || echo %%~na [OK])
    

    【讨论】:

    • 我发现了另一个问题。我必须使用带有参数 /s 的 dir 来搜索所有子文件夹。但它会返回完整的补丁,例如C:\work\video.avi。我想只获得名称的一部分 - 在斜线和点“视频”之间。怎么做,长度可变。
    猜你喜欢
    • 1970-01-01
    • 2013-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-29
    • 1970-01-01
    相关资源
    最近更新 更多