【问题标题】:Import all schtasks .xml files inside the current directory via batch通过批处理导入当前目录中的所有 schtasks .xml 文件
【发布时间】:2017-12-18 03:53:40
【问题描述】:

我知道可以像这样导入多个任务:

schtasks.exe /create /TN "Task 1 Name" /XML "Full_Path_of_Backup_XML_File"
schtasks.exe /create /TN "Task 2 Name" /XML "Full_Path_of_Backup_XML_File"
schtasks.exe /create /TN "Task 3 Name" /XML "Full_Path_of_Backup_XML_File"

但我更喜欢一种更动态的方式来导入当前目录中的所有 schtasks .xml 文件。很像 this 这里的批处理(.xml 而不是 .reg):

rem @echo off
cls
SET folder=%~dp0
for %%i in ("%folder%*.reg") do (regedit /s "%%i")
echo done
pause
EXIT

有人可以指导我正确的方向吗? :)

【问题讨论】:

  • 到目前为止你自己尝试过什么,你卡在哪里了?

标签: xml batch-file scheduled-tasks


【解决方案1】:

您的意思是要遍历与批处理文件脚本位于同一目录中的每个 XML 文件吗?然后用找到的每个 XML 文件创建一个计划任务?如果是这种情况,您可以尝试这样的事情(假设 XML 文件可用于创建计划任务):

@echo off

setlocal enabledelayedexpansion

for %%e in ("%~dp0*.xml") do (
  set /a "count+=1"
  schtasks /create /tn "Task !count! Name" /xml "%%~e"
)

如果您需要能够将包含感叹号的 XML 文件名传递给 schtasks 命令行工具,请改用以下代码:

@echo off

setlocal disabledelayedexpansion
set "count=1"

for %%e in ("%~dp0*.xml") do (
  set "file=%%~e"
  setlocal enabledelayedexpansion
  schtasks /create /tn "Task !count! Name" /xml "!file!"
  endlocal & set /a "count+=1"
)

还有一个问题,如何将任务命名为 .xml 文件名?

这实际上会简化事情,因为在执行期间不需要在 for 循环体中扩展单独的变量:

@echo off

setlocal disabledelayedexpansion

for %%e in ("%~dp0*.xml") do (
  schtasks /create /tn "%%~ne" /xml "%%~e"
)

【讨论】:

  • 谢谢!有用!我直接尝试了第二个脚本以避免将来出现兼容性问题。还有一个问题,如何将任务命名为 .xml 文件名?
  • @Yethat 不客气。我已经更新了我的答案并提供了另一种使用 XML 文件的文件名(不带扩展名)作为新创建的任务名称的方法。
  • 非常好! :) 最后一件事:如果任务已经存在 - 如何覆盖旧的?
  • @Yethat schtasks 命令行工具的/f 开关声明如下:“如果指定的任务已经存在,则强制创建任务并禁止警告。”
  • 感谢您的解决方案。我是批处理脚本的新手,“%~dp0*.xml”这个表达式是什么意思?我们在这里指定目录吗?
猜你喜欢
  • 2013-06-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多