使用批处理文件复制名称仅包含数字的文件

时间:2015-05-18 08:09:11

标签: windows batch-file file-management

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

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

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

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

任何帮助将不胜感激。

3 个答案:

答案 0 :(得分: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以执行复制。

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

答案 1 :(得分:0)

@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\
    )

) 

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

答案 2 :(得分:0)

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)。