【问题标题】:Copy Files recursively from inside directory to outside using batch file使用批处理文件将文件从内部目录递归复制到外部
【发布时间】:2013-02-11 12:07:31
【问题描述】:

有这样的目录结构:

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

【问题讨论】:

标签: recursion batch-file xcopy


【解决方案1】:

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

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

作为批处理文件

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

但是 - 请注意,您可能在多个子文件夹中具有相同的文件名。只有一个会在您的 Dir1 中存活。

编辑

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

for /r "pathToDir1" /d %F in (*) do @copy /y "pathToDir1\%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\*"

【讨论】:

  • 如果任何子文件夹中没有重复项,那么此命令是否会将每个子文件夹中的所有文件复制到不同的文件夹?目的地本身也是一个子文件夹,所以我想我应该把它移到一个新的地方,我猜?
  • @Priyam - 是的,它将文件复制到当前目录,(我假设它是 Dir1)。只要您的源文件夹是 Dir1 的子文件夹,您就可以了。请参阅我的更新答案。
猜你喜欢
  • 2012-10-30
  • 2015-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-18
  • 1970-01-01
  • 2010-09-10
  • 2014-10-04
相关资源
最近更新 更多