【问题标题】:Batch File Infinitely Running批处理文件无限运行
【发布时间】:2018-10-01 12:26:20
【问题描述】:

请耐心听我说;我对这样的编码非常陌生,我想我已经找到了一种简单的方法来做到这一点,但我遇到了问题。我也无法通过谷歌搜索或在这里四处寻找答案,但如果已经回答,我很抱歉!

我在 .bat 文件中运行以下命令:

xcopy D:\SHARENAME \\NAS-IP-ADDRESS\SHARENAME /s /e /d

当我将它作为 .bat 文件运行一次时,它会执行复制操作,然后关闭终端窗口,发出完成信号。 我可以验证是否发生了复制操作,因为新文件确实显示在备份目录中。

但是,一旦我将此 .bat 文件设置为 Windows 计划任务,它就永远不会停止运行。 复制仍然会发生一次,但任务并没有结束。我希望它每天凌晨 3 点运行,这很好,但它在第一次之后就没有机会运行了,因为它从未真正停止过。我是否遗漏了一些东西来关闭这个 .bat 文件以正确停止它?

【问题讨论】:

  • 作为任务运行时是否复制?
  • @FJT 是的,我可以确认确实发生了副本。但它们只会在凌晨 3 点任务运行后发生一次,不会在第二天发生。
  • 任务计划程序可能从不同的工作目录运行,我建议您在批处理文件中使用完整路径。您还可能面临以下情况:任何网络共享都未在计划的触发时间建立,甚至可能需要登录名/密码或具有权限限制,具体取决于您将任务设置为在其下运行的用户或组。如果您通过edit相应地在您的问题中提供这些详细信息,也许会有所帮助。
  • 嘿@Co​​mpo 这不是我在 Stack Exchange 网站上的第一次牛仔竞技表演,但我们非常感谢您的提示!路径尽可能完整,但是关于登录名/密码的指针是需要考虑的。该任务以 SYSTEM 身份运行,但它可能无法访问 NAS。我去看看。
  • 与您的问题无关,无需同时使用 /S/E 选项。 您只需要其中一个,在这种情况下,我建议 /S

标签: batch-file scheduled-tasks


【解决方案1】:

计划任务没有结束,因为 XCOPY 提示复制已存在于目标目录中的文件(如果该文件应该被覆盖)。任何人都没有回答此提示,因此 XCOPY 将永远等待。所以cmd.exe 永远不会结束批处理文件的执行,因此计划任务也永远不会结束。

解决方法是使用命令行:

%SystemRoot%\System32\xcopy.exe "D:\SHARENAME" "\\NAS-IP-ADDRESS\SHARENAME\" /C /E /H /K /Q /R /Y

修复此问题最重要的是选项/Y,它可以避免覆盖提示。

Microsoft 的 xcopy 文档目前包含以下信息:

默认情况下,系统会提示您覆盖,除非您从批处理脚本中运行 xcopy

这是一个错误的信息。 XCOPY 是 Windows 系统文件夹中的可执行文件,不知道是由cmd.exe 从命令提示符窗口中执行还是从批处理脚本中执行。 /Y 必须在命令行上指定,或者有一个环境变量 COPYCMD 包含 /Y 的值以避免覆盖提示。 /Y 不能在命令行上使用 copy 作为 cmd.exe 的内部命令在批处理脚本中使用 COPY

XCOPY 在命令提示符窗口中运行时输出的帮助xcopy /? 解释了上面使用的所有其他选项。在输出帮助的底部可以阅读:

开关 /Y 可能存在于 COPYCMD 环境变量中。
这可以在命令行上用 /-Y 覆盖。

运行copy /?时命令COPY输出的帮助以:

开关 /Y 可能存在于 COPYCMD 环境变量中。
这可以在命令行上用 /-Y 覆盖。 默认为
提示覆盖,除非从
执行 COPY 命令 在批处理脚本中。

附加的第三句使 XCOPYCOPY 之间的 /Y 在批处理脚本中的用法有所不同。

XCOPY的帮助也包含了/S/E的解释。

/S  复制目录和子目录,空目录除外。
/E  复制目录和子目录,包括空目录。
与 /S /E 相同。可以用来修饰/T。

Same as /S /E. 是一个令人困惑的描述。许多初学者认为有必要指定/S/E 以获取复制空目录的整个目录结构。但是这是错误的。这意味着仅/E 就足以复制包含空目录的整个目录结构,而/S /E 被解释为仅/E。除了在 XCOPY 命令行上指定 /E(带有空目录的复制)之外,还指定 /S(不带空目录的复制)是多余的。

我推荐阅读SS64 - XCOPY 文档,它目前比微软的文档更好。

使用 XCOPY 将一个或多个文件和目录复制到指定的目标 目录 非常重要的是指定目标路径,末尾带有反斜杠。这让 XCOPY 清楚地知道目标字符串指定的是目录而不是文件。否则,有必要在复制多个文件或整个目录树时额外指定/I,以通知 XCOPY 目标参数应被解释为文件夹路径。但是如果使用 XCOPY 复制单个文件并且目标参数不以反斜杠结尾,/I 不会避免提示,有关详细信息,请参阅BATCH file asks for file or folder。因此,在使用 XCOPY 将一个或多个文件复制到文件夹时,强烈建议在末尾始终使用反斜杠指定目标文件夹路径。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-12
    • 2012-12-18
    • 1970-01-01
    • 2019-12-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多