我有一个深层的目录 – >子目录树结构的目录。 我需要编写一个batch file从所有的子目录中复制所有编号的文件(名称为数字,没有字母字符的文件)。
例如,一个子目录可能包含以下文件:
我需要将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命令的未记录功能和限制 )。