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

Windows 使用批处理文件复制名称仅包含数字的文件,windows,batch-file,file-management,Windows,Batch File,File Management,我有一个深目录->子目录树结构的目录。我需要编写一个批处理文件来复制所有子目录中的所有编号文件(名称为数字且没有字母字符的文件) 例如,子目录可能包含以下文件: WR10091.txt AX10091.htm 10091.txt AX10091.xml 10091.xml 我需要将10091.txt和10091.xml复制到另一个位置。我可以通过指定AX**复制AX10091.xml和AX10091.htm等文件。但我不知道如何复制没有字母字符的编号文件。有数千个目录,目录结构没有任何模式(

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

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

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

任何帮助都将不胜感激

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

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

@echo off
setlocal enableextensions disabledelayedexpansion
设置“源=%cd%”
设置“target=x:\target\folder”
对于(*)do中的/r“%source%”%%a(
(对于/f“delims=0123456789”%%b in(“%%~na”)do(
打破
))| |回显副本“%~fa”“%target%”
)
在此代码中,%%a的
将迭代指定文件夹下的所有文件。对于每个文件名,/f%%b
将尝试使用数字作为分隔符来标记文件名(
%%~na
)。如果文件名仅包含数字,则将不需要处理任何内容(仅限分隔符),并且
的内部
将提高错误级别。这通过条件执行(如果上一个命令失败,则执行
|
后的代码)进行检查,如果提高了错误级别,则将
复制
操作回显到控制台

如果输出正确,请移除回声以执行复制

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

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,但如果需要,可以进行修复(请参阅)。

请参阅此处的问题。我不能每次都手动转到同一个目录,因为子目录的数量以千计。@DippedBits-现在它是递归的哦-非常高效、聪明和优雅。使用DELIMS删除数字是有趣的逆向思维,BREAK和FOR循环返回代码都是罕见的构造。这可以简化为从命令行执行的单行命令(无批处理)。我假设当前目录是源根目录:
for/r%a in(*)do(for/f“delims=0123456789”%%b in(“%%na”)do break)|复制“%a”targetPath“
@dbenham,nice。如果有人想从命令行使用它,只需一些更正(复制/粘贴
%%
问题)和“改进”(不太详细):
for/r%a in(*)do@(for/f“delims=0123456789”%b in(“%~na”)do@break)| echo copy”%a“targetPath”
我以前从未见过循环返回代码的
。非常非常好<代码>:-)