使用batch file复制包含数字的名称的文件

我有一个深层的目录 – >子目录树结构的目录。 我需要编写一个batch file从所有的子目录中复制所有编号的文件(名称为数字,没有字母字符的文件)。

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

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

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

任何帮助将不胜感激。

@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 )。 如果文件名只包含数字,则不会有任何处理(仅限分隔符),而内部则会引发错误级别。 这是通过条件执行来检查的(如果以前的命令失败,则执行||之后的代码),并且如果引发了错误级别,则将copy操作回显给控制台。

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

注意 :在for循环内部的break只包含一个命令,当找到具有非数字名称的文件时什么也不做。

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

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

 for /f "delims=" %%a in ('dir /b/s/ad ^| findstr /reic:"\\[0-9][0-9]*\..*" /c:"\\[0-9][0-9]*"') do copy "%%~a" "targetDir" 

这可能不适用于XP和/或Vista,但可以根据需要修复(请参阅Windows FINDSTR命令的未记录功能和限制 )。