我有一个带有深度目录的目录 - >子目录树结构。我需要编写一个批处理文件来复制所有子目录中所有编号的文件(名称为数字且没有字母字符的文件)。
例如,子目录可能包含以下文件:
我需要将10091.txt和10091.xml复制到另一个位置。我可以通过指定AX *。*来复制AX10091.xml和AX10091.htm等文件。但我无法弄清楚如何复制没有字母字符的编号文件。有数千个目录,目录结构没有任何模式(树分支的深度可能有很大差异)。
任何帮助将不胜感激。
答案 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)。