【问题标题】:Copying files with name containing just numbers using a batchfile使用批处理文件复制名称仅包含数字的文件
【发布时间】:2015-07-29 15:40:12
【问题描述】:

我有一个具有深层目录->子目录树结构的目录。我需要编写一个批处理文件来复制所有子目录中的所有编号文件(名称为数字且没有字母字符的文件)。

例如,子目录可能包含以下文件:

  • WR10091.txt
  • AX10091.htm
  • 10091.txt
  • AX10091.xml
  • 10091.xml

我需要将 10091.txt 和 10091.xml 复制到另一个位置。我可以通过指定 AX*.* 来复制 AX10091.xml 和 AX10091.htm 等文件。但我不知道如何只复制没有字母字符的编号文件。有数千个目录,目录结构没有任何模式(树分支的深度可以有很大差异)。

任何帮助将不胜感激。

【问题讨论】:

    标签: windows batch-file file-management


    【解决方案1】:
    @echo off
    
    for /f "tokens=* delims="  %%a in ('dir /b /s /a:-d "*"') do (
        echo %%~na|findstr /e /b /r "[1-9]*" >nul 2>nul && (
            copy %%~fa c:\somewhere\
        )
    
    ) 
    

    应该与文件在同一目录中执行。

    【讨论】:

    • 看看那里的问题。由于子目录数以千计,我无法每次手动进入同一目录。
    • @DippedBits - 现在是递归的
    【解决方案2】:
    @echo off
        setlocal enableextensions disabledelayedexpansion
        set "source=%cd%"
        set "target=x:\target\folder"
    
        for /r "%source%" %%a in (*) do (
            (for /f "delims=0123456789" %%b in ("%%~na") do (
                break
            )) || echo copy "%%~fa" "%target%"
        )
    

    在此代码中,for %%a 将遍历指定文件夹下的所有文件。对于它们中的每一个,for /f %%b 将尝试使用数字作为分隔符来标记文件名 (%%~na)。如果文件名仅包含数字,则不会有任何处理(只有分隔符)并且内部 for 会提高错误级别。这通过条件执行进行检查(如果前一个命令失败,则执行|| 之后的代码)并且如果错误级别被提高,copy 操作将回显到控制台。

    如果输出正确,请删除echo 以执行复制。

    注意:在内部 for 循环中包含 break 只是为了让一个命令在找到具有非数字名称的文件时不执行任何操作。

    【讨论】:

    • 噢——非常高效、聪明、优雅。使用 DELIMS 删除数字是一种有趣的逆向思考,BREAK 和 FOR 循环返回码都是很少见的结构。
    • 这可以简化为从命令行执行的单行命令(无批处理)。我假设当前目录是源根目录:for /r %a in (*) do (for /f "delims=0123456789" %%b in ("%%~na") do break)||copy "%a" "targetPath"
    • @dbenham,很好。如果有人想从命令行使用它,只需进行一些更正(复制/粘贴%% 问题)和“改进”(不那么冗长):for /r %a in (*) do @(for /f "delims=0123456789" %b in ("%~na") do @break)||echo copy "%a" "targetPath"
    • 我以前从未见过for loop return code。非常非常棒! :-)
    【解决方案3】:
    for /f "delims=" %%a in ('dir /b/s/a-d ^| findstr /reic:"\\[0-9][0-9]*\..*" /c:"\\[0-9][0-9]*"') do copy "%%~a" "targetDir"
    

    这可能不适用于 XP 和/或 Vista,但可以根据需要进行修复(请参阅 What are the undocumented features and limitations of the Windows FINDSTR command)。

    【讨论】:

      猜你喜欢
      • 2013-07-09
      • 2014-02-02
      • 2013-05-29
      • 1970-01-01
      • 2018-01-19
      • 1970-01-01
      • 1970-01-01
      • 2010-10-03
      • 2017-09-16
      相关资源
      最近更新 更多