我希望将所有文件仅复制到第二级子文件夹中的其他位置。所有文件名都是唯一的。本例中的第二级子文件夹为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" 但是,这会在所有的子文件夹中复制文件,包括第三级的,而我只想在第二级的子文件夹中复制文件。
发布于 2015-08-21 01:04:23
根据foxidrive的注释最终编辑。您需要两个嵌套循环来处理第二级子文件夹中的文件(尽管aschipfl的解决方案使用可能会更简洁一些):
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 = 循环遍历文件(递归子文件夹);在FOR /F = 循环命令:针对另一个命令的结果中尝试(而不是递归) dir /B,如下所示:
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消息。
Output (将C:\更改为D:\):第一个dir /B显示我们以目标文件夹为空开始,而最后一个dir /B显示目标被复制的文件填充.
d:\bat>dir /B "d:\final\*.*"
d:\bat>for /F "delims=" %i in ('dir /B /A:D "d:\test\*.*"') do @copy /B /Y "d:\test\%~i\*.*" "d:\final\*.*" 2>NUL
d:\test\31441809\ttt.txt
1 file(s) copied.
d:\test\ProcMon\LogfileAcrord32Start.CSV
d:\test\ProcMon\LogfileIE.CSV
d:\test\ProcMon\LogfileIEStart.CSV
d:\test\ProcMon\LogfileSwriter.CSV
d:\test\ProcMon\LogfileSwriterStart.CSV
5 file(s) copied.
d:\test\ScreenCaptures\*.*
0 file(s) copied.
d:\test\set\HKCU.txt
d:\test\set\hklm.txt
d:\test\set\regs.txt
d:\test\set\set.txt
d:\test\set\t!exclam!t.txt
5 file(s) copied.
d:\bat>dir /B "d:\final\*.*"
HKCU.txt
hklm.txt
LogfileAcrord32Start.CSV
LogfileIE.CSV
LogfileIEStart.CSV
LogfileSwriter.CSV
LogfileSwriterStart.CSV
regs.txt
set.txt
t!exclam!t.txt
ttt.txt
d:\bat>发布于 2015-08-21 01:39:15
诀窍是两个嵌套的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\是第二级,依此类推。
https://stackoverflow.com/questions/32129482
复制相似问题