批处理文件无限运行

时间:2018-04-20 18:12:14

标签: batch-file scheduled-tasks

在这里忍受我;我对这样的编码非常陌生,我认为我找到了一种简单的方法,但我遇到了问题。我也无法从谷歌搜索或在这里找到答案,但如果它已经得到答复,我道歉!

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

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

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

但是,一旦我将此.bat文件设置为Windows计划任务,它就永远不会停止运行。 副本仍然会出现一次,但任务不会结束。我希望它每天凌晨3点运行,这很好,但是它第一次运行之后再也没有机会运行了,因为它永远不会停止。我错过了关闭这个.bat文件以便正确停止的东西吗?

1 个答案:

答案 0 :(得分: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的内部命令时,不得在命令行上使用xcopy /?

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

  

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

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

结束
  

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

附加的第三句在批处理脚本中的使用情况与 XCOPY COPY 之间的/S之间存在差异。

XCOPY 的帮助还包含对/ESame as /S /E.的解释。

  

/ S复制目录和子目录,但空目录除外   / E复制目录和子目录,包括空目录   与/ S / E相同。可用于修改/ T.

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

我建议您阅读目前比Microsoft文档更好的copy文档。

XCOPY 的一个或多个文件和目录复制到指定的目标目录非常重要的是指定目标路径,并在末尾添加反斜杠。这使得 XCOPY 清楚地表明目标字符串指定了目录而不是文件。否则,有必要在复制多个文件或整个目录树时另外指定/I,以通知 XCOPY 目标参数应解释为文件夹路径。但是<Customization level="0" description="" product-version="17.208"> <Page path="~/pages/so/so301000.aspx" pageSource="..." <PXGridLevel DataMember="Transactions" ParentId="phG_tab_Items#0_grid_Levels#0" TypeFullName="PX.Web.UI.PXGridLevel"> <Children Key="Columns"> <AddItem> <PXGridColumn TypeFullName="PX.Web.UI.PXGridColumn"> <Prop Key="DataField" Value="UsrLinkToContractLneItemDetails" /> <Prop Key="Width" Value="200" /> <Prop Key="DisplayMode" Value="Value" /> <Prop Key="Type" Value="Icon" /> </PXGridColumn> </AddItem> </Children> </PXGridLevel> </Page> <DAC type="PX.Objects.SO.SOLine"> <Field FieldName="UsrLinkToContractLneItemDetails" TypeName="string" TextAttributes="#CDATA" StorageName="AddColumn"> <CDATA name="TextAttributes"><![CDATA[[PXString(50)] [PXUIField(DisplayName = "Details", Enabled = false)] [PXImage(HeaderImage = "main@Info")] [PXUnboundDefault("main@Info", PersistingCheck = PXPersistingCheck.Nothing)]]]></CDATA> </Field> </DAC> </Customization> 如果使用 XCOPY 复制单个文件并且目标参数不以反斜杠结尾,则不会避免提示,有关详细信息,请参阅SS64 - XCOPY。因此,强烈建议在使用 XCOPY 将一个或多个文件复制到文件夹时,始终使用反斜杠指定目标文件夹路径。