我想将只有二级子文件夹中的所有文件复制到另一个位置。所有文件名都是唯一的。此示例中的第二级子文件夹是01102009,05302009和09012010.示例:
C:\test\
2009\
01102009\
file123.A09
file567.B07
05302009\
fileabc.A09
filexyz.A09
ThirdLevelSubFolder\
fileBLAH.B10
2010\
09012010\
fileHello.A08
fileBye.B10
etc.
应该返回:
C:\final\
file123.A09
file567.B07
fileabc.A09
filexyz.A09
fileHello.A08
fileBye.B10
请注意,它没有复制位于第三级子文件夹中的fileBLAH.B10。
如果有帮助,所有文件都以.A ##或.B ##结尾,其中##是两位数字。
我试过了:
robocopy "C:\test" "C:\final" s /LEV:2
但是复制了第二级文件夹(例如,01102009)及其中的文件。我只想要文件。
我也尝试过:
for /r "C:\test" %i in (*.*) do copy "%~fi" "C:\final"
但是它会复制所有子文件夹中的文件,包括第三级子文件夹,而我只想要第二级子文件夹中的文件。
答案 0 :(得分:1)
最终修改。您需要两个嵌套循环来处理二级子文件夹中的文件(尽管 aschipfl 的解决方案带有for /D
may be a bit more concise):
for /F "delims=" %I in ('dir /B /A:D "C:\test\*.*"') do @for /F "delims=" %i in ('dir /B /A:D "C:\test\%~I\*.*"') do @echo copy /B "C:\test\%~I\%~i\*.*" "C:\final\*.*" 2>NUL
原始回答:
for /r
= Loop through files (Recurse subfolders);尝试(不递归)dir /B
FOR /F
= Loop command: against the results of another command代替如下:。
for /F "delims=" %i in ('dir /B /A:D "C:\test\*.*"') do copy /B "C:\test\%~i\*.*" "C:\final\*.*" 2>NUL
请注意,如果源文件夹为空,2>NUL
会阻止显示The system cannot find the file specified
消息。
输出(已将C:\
更改为D:\
):第一个dir /B
显示我们从目标文件夹开始为空,而最后一个{{1} }}显示目标已填充复制的文件......
dir /B
答案 1 :(得分:1)
技巧是两个嵌套的for /D
循环,每个循环覆盖某个目录层次结构级别:
@echo off
for /D %%A in ("C:\test\*") do (
for /D %%B in ("%%~fA\*") do (
xcopy /L /I "%%~fB\*.*" "C:\final"
)
)
这段代码实际上并没有复制任何内容,只是列出了要复制的内容;要启用复制,请从/L
删除xcopy
开关。
该脚本不会针对模式*.A??
和*.B??
进行过滤;如果你想这样做,你需要两个xcopy
命令
此外,它不会复制第一个目录级别的任何内容,因为您的示例列表中没有显示任何文件。
<强>修订:强>
当我谈论目录级别时,我参考以下定义:
所有级别都相对于根位置C:\test\
编号,因此2009\
是第一级,01102009\
是第二级,依此类推。