【问题标题】:How to copy selected files from one folder to another in Batch file?如何在批处理文件中将选定文件从一个文件夹复制到另一个文件夹?
【发布时间】:2021-08-12 15:30:54
【问题描述】:

在文件夹 C:\A 中,我有 afile.h afile.cpp bfile.h bfile.cpp 和其他一些 .h 和 .cpp 文件(Windows 10)

我只想将 afile.h afile.cpp bfile.h bfile.cpp 复制到 C:\B 文件夹,如果文件夹 A 中的文件比文件夹 B 新,则替换它们

我在下面试过但没有用,bat运行但没有任何反应

我的 copybatch.bat 文件

call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvarsall.bat" x86_amd64 
fastddsgen.bat -replace -example CMake aac.idl 
xcopy /y /d C:\A\afile.h C:\B
xcopy /y /d C:\A\afile.cpp C:\B
xcopy /y /d C:\A\bfile.h C:\B
xcopy /y /d C:\A\bfile.cpp C:\B

【问题讨论】:

  • 如何使用与第一行相同的命令在第二行运行 .bat 文件! call fastddsgen.bat …
  • 请阅读我在How to call a batch file that is one level up from the current directory? 上的回答,它解释了fastddsgen.batcall fastddsgen.bat 之间的区别。四个xcopy 行应替换为%SystemRoot%\System32\robocopy.exe "C:\A" "C:\B" "afile.h" "afile.cpp" "bfile.h" "bfile.cpp" /XO /R:3 /W:2 /NDL /NFL /NJH /NJS。在command prompt 中运行robocopy /? 以获取有关命令ROBOCOPY 选项的帮助。
  • BTW:最好使用完整的限定文件名而不是文件名来引用批处理文件fastddsgen.bat,并期望执行copybatch.bat时的当前目录是包含@987654332的目录@。这种期望很容易出错。如果批处理文件fastddsgen.batcopybatch.bat在同一目录下,则可以使用call "%~dp0fastddsgen.bat"%~dp0(驱动器+参数 0 的路径)扩展为当前处理的批处理文件的完整路径,始终以反斜杠结尾。

标签: windows batch-file xcopy


【解决方案1】:

您的xcopy 命令中的/d 是什么意思?您可能认为您指定目标是一个目录,但实际上这是用于与日期相关的事情。

这里真正的问题可能是您的计算机不了解C:\B 是目录还是文件,从而导致问题。

因此,我建议您关注my answer from this other question,并使用以下命令:

xcopy /y C:\A\afile.h C:\B\
xcopy /y C:\A\afile.cpp C:\B\
xcopy /y C:\A\bfile.h C:\B\
xcopy /y C:\A\bfile.cpp C:\B\

祝你好运

【讨论】:

  • xcopy /?/d: If no date is given, copies only those files whose source time is newer than the destination time,没关系。没有尾随退格的目标文件夹也可以(如果文件夹存在)(尽管反斜杠可以被认为是“最佳实践”)。这里真正的问题是,xcopy 命令甚至没有被执行(由于之前没有call 批处理文件,正如 Compo 和 Mofi 已经评论的那样)
  • ???所以你启动一个命令,当那个命令“完成”时,下一个命令不会被执行?在我看来,您的第一个命令中存在严重问题。这可以使用start 而不是call 来“解决”(或解决):start 会导致打开另一个提示,并且无论如何都会执行下一个命令,即使您的第一个命令出现问题。恐怕你需要更多地关注为什么你的第一个命令没有完成。
  • 启动的 command 根本不是问题,如果不是 called(如我所说),批处理文件 (或started)。当你只执行script.bat(没有callstart)时,你将控制权转移给它,它永远不会返回执行第一个脚本的以下命令。
【解决方案2】:

我也将 call 用于第二个命令

call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvarsall.bat" x86_amd64 
call fastddsgen.bat -replace -example CMake aac.idl
xcopy /y /d C:\A\afile.h C:\B
xcopy /y /d C:\A\afile.cpp C:\B
xcopy /y /d C:\A\bfile.h C:\B
xcopy /y /d C:\A\bfile.cpp C:\B

使用CALL的原因 --> 不使用CALL时,当前批处理文件停止,被调用的批处理文件开始执行。

【讨论】:

    猜你喜欢
    • 2010-11-02
    • 2014-03-21
    • 1970-01-01
    • 2021-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多