将文件从第一级子文件夹复制到另一个位置

时间:2015-08-20 22:28:48

标签: batch-file cmd robocopy

我想将只有二级子文件夹中的所有文件复制到另一个位置。所有文件名都是唯一的。此示例中的第二级子文件夹是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" 

但是它会复制所有子文件夹中的文件,包括第三级子文件夹,而我只想要第二级子文件夹中的文件。

2 个答案:

答案 0 :(得分:1)

根据 foxidrive 的评论

最终修改。您需要两个嵌套循环来处理二级子文件夹中的文件(尽管 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\是第二级,依此类推。

相关问题