批处理文件在执行后无限循环闪烁命令提示符

Batch file flashing command prompt in endless loop after being executed

背景

我想用ROBOCOPY备份文件夹。为了了解这一点,我创建了一个测试源文件夹,其中包含其他子文件夹和虚拟文件。

F:\RoboCopy\RoboCopy_Files

我能够从命令行和 PowerShell 中对源文件夹进行 ROBOCOPY(使用 Windows10)。

ROBOCOPY "RoboCopy_Files" "RoboCopy_Files_Testing" /MIR

它完全符合我的要求。
现在我将命令放入批处理文件 Robocopy.cmd.

问题症状

但是,当我将 相同的命令放入 Robocopy.cmd 文件 时,在 F:\RoboCopy 文件夹中运行 它,我只得到 闪烁 cmd window 并且在不断增加的行数上重复我的命令。

如何将命令放入 CMD 文件(例如 Robocopy.cmd)以便稍后 use/share/schedule?如何在不执行命令的情况下防止命令提示符无限循环闪烁?

注意:我觉得这更多的是学习如何将 cmd 脚本放入文件,而不是如何使用 ROBOCOPY。

原因:文件和命令同名

我想在 ROBOCOPY 文件中使用 ROBOCOPY 命令。这是一个错误。
该文件最终会调用自身。

解决方案 1:重命名批处理文件

一种解决方案是将批处理文件重命名为不同于文件中的命令。

解决方案 2:使用更明确的命令调用

另一种解决方案可能是使用 ROBOCOPY.exe 或明确指定 exe 的完整路径,例如 C:...\robocopy.exe。这将防止调用命令与调用批处理文件本身的“混淆”。

解决方案 1 x 2

最佳解决方案(再次感谢 Mofi)是将 1 x 2 组合在一起。使用唯一的批处理文件名并在批处理文件中指定命令 (exe) 的完整路径。

有用的相关命令:要确定命令 (exe) 的完整路径,请参阅 WHERE command (e.g. Where Robocopy.exe - This should be somewhere in windows folder.), system variables (e.g. SS64), or the command SET

我的完整版本是 运行 例如 BackupRobocopyFiles.cmd 行:

%SystemRoot%\System32\robocopy.exe "RoboCopy_Files" "RoboCopy_Files_Testing" /MIR /R:2  

注意:仅当 cmd 文件位于根文件夹 F:\RoboCopy 中时,这才有效。如果我想 运行 来自不同文件夹(或任务调度程序)的 cmd,我会指定 SOURCE_FOLDER 和 DESTINATION_FOLDER ROBOCOPY 命令参数的完整路径。

贡献

答案是根据“MC ND”、“eryksun”的评论找到的。 “Mofi”确实指出,原来的 Q 没有帮助。感谢大家。