Recursion 使用批处理文件将文件从内部目录递归复制到外部

Recursion 使用批处理文件将文件从内部目录递归复制到外部,recursion,batch-file,xcopy,Recursion,Batch File,Xcopy,有以下目录结构: Dir1 --Dir2 --File1 --File2 --Dir3 --File3 --File4 --File5 现在我想使用批处理文件将子目录(Dir2,Dir3)中的所有文件复制到父目录Dir1。 我已经想出了下面的代码,但它并不完美。我得到下面的输出- Directory2 --It has 4 files all together Invalid number of parameters Invalid number

有以下目录结构:

Dir1
--Dir2
    --File1
    --File2
--Dir3
    --File3
--File4
--File5
现在我想使用批处理文件将子目录(Dir2,Dir3)中的所有文件复制到父目录Dir1。 我已经想出了下面的代码,但它并不完美。我得到下面的输出-

Directory2             --It has 4 files all together
Invalid number of parameters
Invalid number of parameters
Does E:\Directory1\Copy\File1.dat specify a file name   -- And only this file gets copied
or directory name on the target
(F = file, D = directory)?
代码-

@echo off
call :treeProcess
Pause
goto :eof

:treeProcess
rem Do whatever you want here over the files of this subdir, for example:
for /D %%d in (*) do (
    echo %%d
    cd %%d
    for %%f in (*) do xcopy %%f E:\Movies\Copy\%%f
    call :treeProcess
    cd ..
)
exit /b

不需要批处理文件。从Dir1文件夹执行以下命令:

for /r /d %F in (*) do @copy /y "%F\*"
作为批处理文件

@echo off
for /r /d %%F in (*) do copy /y "%%F\*"
@echo off
set "root=pathToDir1"
for /r "%root%" /d %%F in (*) do copy /y "%root%\%%F\*"
但是-请注意,在多个子文件夹中可能有相同的文件名。只有一个能在你的Dir1中存活

编辑

以上假设您正在从Dir1文件夹运行命令(或脚本)。如果脚本被扩充为包含Dir1的路径,那么它可以从任何地方运行

for /r "pathToDir1" /d %F in (*) do @copy /y "pathToDir1\%F\*"
或者作为批处理文件

@echo off
for /r /d %%F in (*) do copy /y "%%F\*"
@echo off
set "root=pathToDir1"
for /r "%root%" /d %%F in (*) do copy /y "%root%\%%F\*"
可以将Dir1的路径作为参数传递给批处理文件。如果要使用当前文件夹,请传入
作为路径

@echo off
for /r %1 /d %%F in (*) do copy /y "%~1\%%F\*"

不需要批处理文件。从Dir1文件夹执行以下命令:

for /r /d %F in (*) do @copy /y "%F\*"
作为批处理文件

@echo off
for /r /d %%F in (*) do copy /y "%%F\*"
@echo off
set "root=pathToDir1"
for /r "%root%" /d %%F in (*) do copy /y "%root%\%%F\*"
但是-请注意,在多个子文件夹中可能有相同的文件名。只有一个能在你的Dir1中存活

编辑

以上假设您正在从Dir1文件夹运行命令(或脚本)。如果脚本被扩充为包含Dir1的路径,那么它可以从任何地方运行

for /r "pathToDir1" /d %F in (*) do @copy /y "pathToDir1\%F\*"
或者作为批处理文件

@echo off
for /r /d %%F in (*) do copy /y "%%F\*"
@echo off
set "root=pathToDir1"
for /r "%root%" /d %%F in (*) do copy /y "%root%\%%F\*"
可以将Dir1的路径作为参数传递给批处理文件。如果要使用当前文件夹,请传入
作为路径

@echo off
for /r %1 /d %%F in (*) do copy /y "%~1\%%F\*"

我主要使用一行命令来完成这个。。。Dir1>XCOPY**/我猜你是从这个开始的。我主要用一行命令来完成这个。。。Dir1>XCOPY**/s Dir1I我猜您是以此为起点的。如果任何子文件夹中都没有重复项,那么此命令是否会将每个子文件夹中的所有文件复制到其他文件夹?另外,目标本身是一个子文件夹,所以我想我应该将其移动到一个新的位置,我想?@Priyam-是的,它将文件复制到当前目录(我假设它是Dir1)。只要源文件夹是Dir1的子文件夹,就可以了。查看我的更新答案。如果任何子文件夹中都没有重复项,那么此命令是否会将每个子文件夹中的所有文件复制到其他文件夹?另外,目标本身是一个子文件夹,所以我想我应该将其移动到一个新的位置,我想?@Priyam-是的,它将文件复制到当前目录(我假设它是Dir1)。只要源文件夹是Dir1的子文件夹,就可以了。请参阅我的最新答案。