14

我正在使用schtask带有 PowerShell 的命令。出现的问题是,当程序/脚本参数包含C:\Program Files\时,它认为路径是公正C:\Program的,路径的其余部分是一个参数。我试图通过使用"前场​​和后场来逃避它,但这并没有什么不同。我怎样才能做到这一点?我无法对路径进行硬编码,因为它可以在用户安装时更改。

我在 Windows 7 x64 中创建了这个。它创建任务 OK 并且脚本返回。但是,当我在任务计划程序中查看它时,任务的属性,然后是操作,然后是 hit edit,它将程序显示为 C:\Program ,然后将其余的作为参数。

在此处输入图像描述

脚本:

$folder = Split-Path $MyInvocation.MyCommand.Path -Parent
$app = "\Demon.DatabasePurge.exe"
$exe = $app.Insert(0, $folder)
schtasks /create /tn "Demon Purge Job" /sc daily /st 00:00:00 /tr $exe

这是我尝试过的:

$folder = Split-Path $MyInvocation.MyCommand.Path -Parent
$app = "\Demon.DatabasePurge.exe`""
$exe = $app.Insert(0, $folder)
$exe2 = $exe.Insert(0, "`"")
schtasks /create /tn "Demon Purge Job" /sc daily /st 00:00:00 /tr $exe2
4

3 回答 3

18

我也遇到了这个问题..其他有这个问题的人的答案是包含单引号

/TR "'C:\Program Files (x86)\etc\test.exe'"
于 2013-06-13T04:49:41.327 回答
7

我在 Windows Server 2008 R2 上遇到了同样的问题。虽然Microsoft 支持表明您应该能够用 \" 将命令括起来,但我从来没有这样做过,但是单引号可以工作。此外,带空格的参数也可以用单引号括起来:

schtasks /create /f /tn "Test" /tr "'c:\program files\test.bat' arg1 'arg 2 with spaces' arg3" /sc Daily /st 00:00

或者在构建要执行的字符串时(并使用您的 $folder 变量):

$createTask = "schtasks /create /f /tn `"Demon Purge Job`" /tr `"'$folder\Demon.DatabasePurge.exe' arg1 'arg 2 with spaces' arg3`"" /sc daily /st 00:00
Invoke-Expression $createTask

第一个示例生成以下任务操作屏幕: 在此处输入图像描述

于 2013-09-16T08:46:06.910 回答
1

要解决此问题,请将任务的路径部分(不包括参数或开关)括在反斜杠\和引号"字符组合之间,例如\". 当您创建包含空格的路径或命令时,像往常一样将任务的完整路径(包括参数或开关)括在引号之间。

代码:

schtasks /create /f /tn "Test" /tr "'c:\program files\test.bat' arg1 'arg 2 with spaces' arg3" /sc Daily /st 00:00

代替:

schtasks /create /f /tn "Test" /tr "\"c:\program files\test.bat\" arg1 'arg 2 with spaces' arg3" /sc Daily /st 00:00
于 2018-06-22T01:57:56.290 回答