我有一个具有深层目录->子目录树结构的目录。我需要编写一个批处理文件来从所有子目录中复制所有带编号的文件(名称为数字且没有字母字符的文件)。
例如,子目录可能包含以下文件:
- 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
)。如果文件名只包含数字,则不会有任何处理(只有分隔符)并且内部 for
会提高错误级别。这通过条件执行进行检查(如果前一个命令失败,则执行 ||
之后的代码),如果错误级别提高,则 copy
操作将回显到控制台。
如果输出正确,移除echo
执行复制。
注意:包含内部 for
循环中的 break
只是为了让一个命令在非数字名称的文件被删除时不执行任何操作找到了。
关于windows - 使用批处理文件复制名称仅包含数字的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30298040/