引号无效的任务计划程序参数

时间:2017-08-10 11:16:24

标签: windows batch-file windows-10 taskscheduler

示例 run.bat 文件

echo "Test"
echo %1
echo %2
set /p DUMMY=Hit ENTER to continue...

所以这个bat文件将打印给它们的前两个参数。参数可能包含也可能不包含空格。为此我用双引号逃脱了它们。

run.bat -test "arg2 d"

通过命令行调用时,它工作得很好。

我想通过任务计划程序安排该游戏。但任务计划程序打开一个cmd窗口并立即关闭。

不工作

enter image description here

工作

Task Image

请注意参数中的引用。这导致了这个问题。那么如何用空格来转义参数呢。

此外,如果输入的程序/脚本文件位置没有引号,则参数正在运行。但为此,脚本必须位于没有空格的文件夹中。

行动中的错误

enter image description here

那么如何在文件路径中创建一个带空格的任务,以及如何用空格创建参数。

它仅在Windows 10中发生。它在Windows 7中正常运行。顺便说一下。

2 个答案:

答案 0 :(得分:0)

我有一个类似的问题。我在Server 2012 R2上运行了计划任务。我不得不将任务的下拉菜单更改为Windows 2012,而不是2008,它似乎可以正常工作。也许Win10也需要在任务中选择2012年。

答案 1 :(得分:0)

简短回答:像在命令提示符中键入一样,使用整个命令行,并在其周围加上引号。 不要转义任何内部引号,只需在命令行的开头和结尾多加一个引号即可。

然后将计划程序设置为 cmd.exe 并将参数设置为 /c(引用命令行)

长答案:根据 cmd.exe 的文档(在 'cmd /?' 中找到)

<块引用>

如果指定了 /C 或 /K,则后面的命令行的其余部分 switch 作为命令行处理,其中的逻辑如下 用于处理引号 (") 字符:

  1. 如果满足以下所有条件,则保留命令行上的引号字符:
  • 没有 /S 开关
  • 正好两个引号
  • 两个引号字符之间没有特殊字符,其中 special 是以下之一:&<>()@^|
  • 两个引号之间有一个或多个空白字符
  • 两个引号字符之间的字符串是可执行文件的名称。
  1. 否则,旧的行为是查看第一个字符是否是引号,如果是,则去除前导字符并删除 命令行上的最后一个引号字符,保留后面的任何文本 最后一个引号字符。