计划任务在路径中有空格

Posted

技术标签:

【中文标题】计划任务在路径中有空格【英文标题】:Schedule Task with spaces in the path 【发布时间】:2008-12-11 18:35:05 【问题描述】:

我们正在以编程方式安排任务。但是,要调度的可执行文件可以安装在包含空格的路径中。即c:\program Files\folder\folder\文件夹program\program.exe

当我们将此路径作为参数提供给任务调度程序时,它无法启动,因为它找不到可执行文件。显然需要用引号 (") 括起来。

我们遇到的问题是,即使我们将路径作为参数传递时用引号括起来(cmd +“\”+路径+“\”),它仍然没有在使用的路径中包含引号安排任务。

有人知道如何强制将引号包含在路径中吗?

编辑:回复评论:

我们有同样的想法,这就是问题所在。 ~1 格式基于文件夹的索引,所以如果说你有这 3 个文件夹:

Program Applications
Program Files
Program Zips

那么路径就是:progra~2

现在,如果您说这些文件夹超过 10 个,则路径可能如下所示:progr~12。

现在,并不是说这不是一个可行的解决方案,而是必须计算文件夹以找到正确的文件夹,然后使用索引来构建路径有点麻烦,而且 IMO 不太干净。

我们希望有更好的方法。

编辑 2:添加了适用的代码 sn-p

您要求提供代码:这就是我们构建传递给调度程序的 Args 字符串的方式:

string args = "/CREATE /RU SYSTEM /SC " + taskSchedule + " /MO " + taskModifier + " /SD " + taskStartDate + " /ST " + taskStartTime + " /TN " + taskName + " /TR \"" + taskSource + "\"";

其中 taskSource 是应用程序的路径。

【问题讨论】:

您说的这个任务计划程序是什么?你是如何调用它的?请给代码。 您说的这个任务计划程序是什么?恕我直言,它似乎正在错误地解析您的有效命令行参数。 "那么路径将是:progra~2" - 不一定是 progra~2。这取决于先创建哪个。一旦创建它就不会改变,即使它可能以其他方式排序。 正确,我只是想简单解释一下为什么这可能是一个问题而不是一个可行的解决方案。 【参考方案1】:

看来您正在使用 schtasks.exe - 我花了更长的时间才弄清楚这一点,而不是找到答案!请提供更多详细信息! :) 我找到了a quick google search的答案

试试这个代码:

string args = "/CREATE /RU SYSTEM /SC " + taskSchedule + " /MO " + taskModifier + " /SD " + taskStartDate + " /ST " + taskStartTime + " /TN " + taskName + " /TR \"\\\"" + taskSource + "\""

它在 TR 参数值的前面添加了一个 \"。

【讨论】:

Google 是您的朋友。谷歌第一,所以第二。 :) 这可能作为 string.Format(@"") 更明显。我喜欢 string.Format()。 Google 第一,SO 第二,TheSoftwareJedi 第三 好吧,我可以发誓我们尝试过这种方式,但我们没有,我们已经转义了两次引号,我们也没有添加转义字符。 FWIW,该链接不如您的回答有用,所以我认为 SO 将是第一,谷歌第二。这就是创建 SO 的原因,因此我们得到了有意义的有针对性的答案。再次感谢!【参考方案2】:

你可以用 progra~1 替换程序文件 和文件夹程序到文件夹〜1(第一个6个字母和〜1)让它工作,直到有人发布正确的答案

【讨论】:

查看问题的编辑。这里没有足够的空间来解释。【参考方案3】:

你能显示代码吗?

即将上述示例中的路径设为“路径”(带引号),然后进行调用

这可能也有帮助 http://www.jguru.com/faq/viewquestion.jsp?EID=768691

【讨论】:

感谢您的链接。它实际上提出了使用短名称格式的几个问题。根据链接,文件夹的短名称是在创建时生成的,如果一个文件夹被删除,其他文件夹的短名称不会改变。这意味着我的计算可能是错误的。 此外,根据操作系统安装,可能不会生成短名称,这会导致失败,因为找不到可执行文件。这比我想象的还要糟糕。【参考方案4】:

猜测短名称不是一个好方法,因为它是一个实现细节,并且可以随每个 Windows 版本而改变。

如果您需要短名称,请索取:http://www.c-sharpcorner.com/UploadFile/crajesh1981/RajeshPage103142006044841AM/RajeshPage1.aspx

【讨论】:

感谢您的链接。但是,我们可能会遇到这样一种情况:“当应用程序调用此函数并在不支持 8.3 别名的卷上指定路径时,如果路径长于 67 个字节,则函数将失败并返回 ERROR_INVALID_PARAMETER。”【参考方案5】:

将批处理文件放在没有空格的位置。

在批处理文件中,运行带有空格的程序命令。

【讨论】:

哎呀,重命名您的可执行文件是一个简单问题的简单解决方案。几年后,当某些事情发生变化时,它会增加一定程度的复杂性和混乱,但你会怎么做? 我不提倡重命名任何可执行文件。只需创建一个新的一行批处理文件。你甚至可以在里面放 cmets 来说明情况。

以上是关于计划任务在路径中有空格的主要内容,如果未能解决你的问题,请参考以下文章

将脚本作为计划任务运行时出现“找不到路径”

使用 python 子进程创建计划任务

应急响应基础技能

win10设置每天定时关机

Windows计划任务无法写Log的问题

Windows通过定时计划任务执行bat文件