指定“开始” Windows 中 schtasks 命令中的目录
我意识到这个问题在以下线程中得到了“回答”: Specifying the running directory for Scheduled Tasks using schtasks.exe
但是,我我仍然无法理解答案并准确地了解我的情况的结果会是什么样子。
我的 schtasks 命令如下所示:
Schtasks /Create /TR "C:\Program Files\Java\jre6\bin\javaw.exe main.MoveFile input.txt" /SC WEEKLY /TN mytask
我想要指定在“C:\My Library”目录中开始。 在 tr 部分之前放置 "\" 会填充启动目录“C:\Program Files\Java\jre6\bin”。
我已经搞砸了很多次,但我似乎无法让它发挥作用。
I realize that this question is "answered" at the following thread: Specifying the running directory for Scheduled Tasks using schtasks.exe
However, I'm still having trouble understanding the answer and seeing exactly what the result would look like for my situation.
My schtasks command looks like this:
Schtasks /Create /TR "C:\Program Files\Java\jre6\bin\javaw.exe main.MoveFile input.txt" /SC WEEKLY /TN mytask
I want to specify the start in directory of "C:\My Library". Putting a "\" before the tr section fills in a start-in directory of "C:\Program Files\Java\jre6\bin".
I've messed around with it a lot, but I just can't seem to make it work.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(9)
如果所有其他方法都失败,您可以重定向到一个批处理文件,该文件设置其自己的 CD,然后调用您的程序。
例如:
作为 schtask,以及
“C:\example\batch.bat”。 这应该将当前目录保留为您在批处理文件中将其更改为的目录,并保留与其相关的所有引用。
If all else fails, you can redirect to a batch file that sets it's own CD, then calls your program.
for example:
As the schtask, and
as "C:\example\batch.bat". That should keep the current directory as whatever you change it to in the batch file and keep all references relative to that.
更新:请注意,从 Powershell v3 开始(但仅在 Windows 2012 及更高版本下!),我发现新的 API 更有吸引力:
Amal 的带有
/v1
开关的解决方案很棒但不允许在自定义文件夹中创建任务(即您无法创建“MyCompany\MyTask”并且所有内容最终都在根文件夹中),因此我最终得到了如下所述的 PowerShell 脚本。用法:
(注意,
enable
必须小写 - 对于布尔值,您需要$value.ToString().ToLower()
)<强>实现:
该函数使用XML任务定义和“Schedule.Service”COM对象。
UPDATE: Note that starting from Powershell v3 (but only under Windows 2012 and higher!) there's new API which I find much more attractive:
Amal's solution with
/v1
switch is great but doesn't allow to create tasks in custom folders (ie you can't create "MyCompany\MyTask" and everything ends up in the root folder), so I finally ended up with a PowerShell script described below.Usage:
(Note,
enable
must be lowercase - for a boolean you'd need$value.ToString().ToLower()
)Implementation:
The function uses XML task definition and "Schedule.Service" COM object.
不确定您使用的是哪个版本的 Windows,但从阅读其他问题来看,Vista / Server 2008 上的 schtasks 似乎没有提供允许您直接指定“启动”目录的命令选项。 人们提供的解决方法是:
Not sure what version of Windows you are on, but from reading the other question it looks like schtasks on Vista / Server 2008 does not provide a command option that would allow you to specify a "start-in" directory directly. The workarounds people provided were:
正如您所注意到的,在 /TR 参数中使用额外引号的技巧仅允许您使用与可执行文件所在的目录相同的目录。 如果要指定不同的工作目录,则应使用 /XML 选项并指定列出工作目录的 XML 文件。 该命令将如下所示:
XML 文件将如下所示:
这里有有关 XML 架构的更多信息: http://msdn.microsoft.com/en-us/library/windows/desktop/aa383609(v=VS.85).aspx
As you note, the trick of using the extra quotes in the /TR parameter only allows you to use the same directory as where the executable resides. If you want to specify a different working directory, you should use the /XML option and specify an XML file that lists the working directory. The command would be something like this:
The XML file would look something like this:
There's more information about the XML schema here: http://msdn.microsoft.com/en-us/library/windows/desktop/aa383609(v=VS.85).aspx
尝试
更改工作目录,然后运行 schtasks。
Try
Change working directory and then run schtasks.
需要
安排一个从特定目录运行的任务。如果我们在执行
pwd
命令时调用此目录c:\x
它将打印c:\x
。 从那里开始的每个路径都是相对于该目录的。另一个例子:运行
java -jar myapp.jar
将执行位于c:\x\myapp.jar
中的 JAR 文件问题
是无法使用命令
schtasks /create
设置该特定参数解决方案
有点步骤(就像步骤太多):
使用 schtasks 尽可能具体地创建任务/创建命令。 尝试将每个参数设置为所需的值:开始时间、重复次数、持续时间等...
在这种情况下,
/tn
参数是强制性的,因此设置它:\tn mytask
使用 schtasks /query /tn mytask /xml > 将新创建的任务导出到 XML > mytask.xml
在您喜欢的编辑器中打开
mytasks.xml
。 您应该看到类似这样的内容(我隐藏了不有趣的部分):
部分内,在
字段下方引入一个新的字段:并保存文件。此字段在此处的 xml 架构定义中定义 https://learn.microsoft.com/en-us/windows/desktop/taskschd/task-scheduler-schema
删除之前创建的任务 (使用修改后的 xml 重新创建它):
schtasks /delete /tn mytask
使用
/xml
参数再次创建任务:schtasks \tn mytask \xml mytask.xml
只是为了看看它是否有效
使用
schtasks /run /tn mytask 执行它
。The need
To schedule a task that will run from an specific directory. If we call this directory
c:\x
whenever thepwd
command is executed it will printc:\x
. Every path from there is relative to that directory.Another example: running
java -jar myapp.jar
will execute the JAR file located inc:\x\myapp.jar
The problem
It is impossible to set that specific parameter using the command
schtasks /create
The solution
Is a bit steppy (like in too many steps):
Create the task as specific as you can using the
schtasks /create
command. Try to set every parameter to the desired value: start time, repetition, duration, etc...In this case the
/tn
argument is mandatory, so set it:\tn mytask
Export the newly created task to XML using
schtasks /query /tn mytask /xml > mytask.xml
Open
mytasks.xml
in your favorite editor. You should see something like this (I've hidden the not interesting parts):<Exec>
section, below to the<Argument>
field introduce a new field:And save the file. This field is defined in the xml schema definition here https://learn.microsoft.com/en-us/windows/desktop/taskschd/task-scheduler-schema
Delete the previously created task (to recreate it using the modified xml):
schtasks /delete /tn mytask
Create the task again using
/xml
argument:schtasks \tn mytask \xml mytask.xml
Just to see if it works
Execute it using
schtasks /run /tn mytask
.我发现,如果您在 SCHTASKS 命令行中使用 8.3 命名约定作为路径和文件名,“起始位置”字段将使用文件路径填充 -
例如“C:\Progra~1\NBVCl~1\nbv_up~ 1.exe”将导致“C:\Progra~1\NBVCl~1”出现在
“开始于”区域
I have found that if you use the 8.3 naming convention in the SCHTASKS command line for the path and file names the "Start In" field is polulated with the file path -
e.g. "C:\Progra~1\NBVCl~1\nbv_up~1.exe" will result in "C:\Progra~1\NBVCl~1" appearing in
the "start In" area
注意:这是我刚刚看到的问题..
注意:您必须有两行:
我在 Windows 2008 中注意到的一件事是,它比 2003 更好地处理批处理脚本。 我不认为“运行”文件夹那么重要,因为我刚刚从任务计划程序手动在测试机器上运行服务器重新启动,它运行得很好。
对于那些可能遇到转义字符等问题的人来说,考虑以下内容:
或者,另一个例子:
注意:额外的引号和额外的反斜杠。
希望这可以帮助!
Note: Here is the issue that I just saw with this..
Note: You have to have two lines:
One of the things that I have noticed with Windows 2008, is that it handles batch scripts much better than 2003, for example. I don't think the "run in" Folder is as important as I just ran the server restart on a test machine manually from Task Scheduler and it runs just fine..
For the folks that maybe running into issues with escaping characters and such, consider the following:
or, another example:
Note: The extra Quoting and the extra backslashes.
Hope this helps!
唯一的方法是使用 XML 文件,使用以下命令: schtasks /Create /XML C:\file.xml /TN TaskName /RU 域\用户名 /RP 密码
每天 23:00 运行的示例 XML 文件,C:\task文件夹将设置运行目录:
The only way would be to use an XML Flle, use the following command: schtasks /Create /XML C:\file.xml /TN TaskName /RU domain\username /RP password
Sample XML File that will run every day at 23:00, the C:\taskfolder will set the run in directory: