【问题标题】:How can I run a batch file with a loop as a scheduled task?如何将带有循环的批处理文件作为计划任务运行?
【发布时间】:2014-10-06 20:14:59
【问题描述】:

我在批处理文件中有以下代码:

for /F "tokens=1,2" %%a in (%CD%\clients.txt) do (
    start "My Task" /d "%CD%" /b php -f "%CD%\task.php" "%%a" "/%%b"
)

如果我从命令提示符手动运行批处理文件,它工作正常。但是,如果我将它作为计划任务运行,它会失败并显示上次运行结果 (0x2)。请注意,如果我从要运行的进程中的变量的代码和硬编码值中删除循环,则任务运行良好。

我还注意到,任何类型的简单文件操作,例如 echo test > log.txt 在计划任务执行批处理文件时似乎都不会运行,而是手动运行。我尝试将计划任务设置为“以最高权限运行”,但没有解决。我还将计划任务操作的“开始于”设置设置为 PHP 和文本文件所在的目录,这也不起作用。这里的想法用完了,有什么想法吗?

【问题讨论】:

  • 如果非要我猜的话,%CD% 并不是你想的那样(它指的是当前目录,不一定是批处理脚本所在的目录中)。
  • 谢谢!这让我走上了正确的轨道,我想通了。解决方案发布在答案中。

标签: batch-file


【解决方案1】:

我想通了。正如 iCodez 在 cmets 中指出的那样,%CD% 并不是我所期望的。在我的简单测试中创建了文件,但在错误的文件夹中。问题是由于我已更新 HKEY_CURRENT_USER\Software\Microsoft\Command Processor\AutoRun 以指向不同的文件夹。看起来这优先于我在计划任务中指定的 Start In 目录。我删除了我的 AutoRun 键,事情开始工作了。只是表明编辑其中一些注册表项是有风险的!

【讨论】:

  • 您可以使用cmd /d /c myBatchFile.cmd 来避免执行自动运行注册表项
猜你喜欢
  • 2013-03-01
  • 1970-01-01
  • 2019-04-06
  • 1970-01-01
  • 2014-09-14
  • 2014-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多