【问题标题】:Batch file flashing command prompt in endless loop after being executed批处理文件执行后在无限循环中闪烁命令提示符
【发布时间】:2017-08-10 19:53:43
【问题描述】:

背景

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

F:\RoboCopy\RoboCopy_Files

我能够从命令行和 PowerShell(使用 Windows 10)ROBOCOPY 源文件夹。

ROBOCOPY "RoboCopy_Files" "RoboCopy_Files_Testing" /MIR

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

问题症状

但是,当我将 相同的命令放入 Robocopy.cmd 文件,在根 F:\RoboCopy 文件夹中并运行它时,我只得到 闪烁cmd 窗口,我的命令在越来越多的行上重复。

如何将命令放入 CMD 文件(例如 Robocopy.cmd)以供以后使用/共享/调度?如何防止命令提示符在不运行命令的情况下无限循环闪烁?

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

【问题讨论】:

  • 如果您的批处理文件名为robocopy.cmd,那么您在批处理文件中的robocopy 命令将调用批处理文件本身。更改批处理文件的名称或在批处理文件中使用robocopy.exe以避免它调用自己
  • 脚本应该有一个唯一的名字。但是,这不一定是问题。如果它从工作目录中获取 robocopy.cmd,您可以从隐式搜索路径中删除该目录。定义环境变量NoDefaultCurrentDirectoryInExePath。您仍然可以通过添加“。”来搜索工作目录。到PATH,但在系统目录之后。
  • @MCND 您的评论是正确的。更改批处理文件名后,脚本按预期工作。谢谢你。会接受你的答案,如果你做出一个。
  • @Mofi 您对当前问题的帮助是正确的。但是,我可以重写 Q 以更好地描述正在发生的事情(只是症状)。关键是 cmd 正在调用自己,因为我为文件和命令使用了相同的名称。不管多么不可能,这可能会再次发生在 cmd 新手(比如我自己)身上。 Q的新标题可以是:命令提示符在无限循环中闪烁-> A:尝试使用不同的文件名或更改命令的调用方式,因为它正在调用自己。

标签: windows batch-file cmd robocopy


【解决方案1】:

原因:文件和命令同名

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

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

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

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

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

解决方案 1 x 2

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

有用的相关命令:要确定命令 (exe) 的完整路径,请参阅WHERE 命令(例如,Robocopy.exe 所在的位置 - 这应该在 windows 文件夹中的某个位置。)、系统变量(例如 SS64)、或命令SET

在我的情况下,完整版本将运行例如 BackupRobocopyFiles.cmd 行:

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

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

贡献

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

【讨论】:

  • 我建议始终在批处理文件中调用其他批处理文件或可执行文件,例如带有文件扩展名和完整路径的robocopy,如果可以避免此类问题的话。另一个经常出现的问题是安装了某些东西,它在开头而不是结尾将其目录添加到系统环境变量 PATH 中,其中包含偶然的可执行文件或与%SystemRoot%\System32 中的可执行文件同名的脚本。结果是只包含findstrrobocopy 的批处理文件突然不再工作,多年来一直正常工作。此处应使用解决方案 1+2。
  • @Mofi 谢谢你的朋友。您(不仅)帮助我更好地了解正在发生的事情。根据评论更新了答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-02
  • 1970-01-01
相关资源
最近更新 更多