系统找不到指定的文件 - 任务计划程序

The system cannot find the file specified- Task Scheduler

我有批处理脚本文件,它应该用 pgp 加密文件。我在任务调度程序中定义了一个任务来执行此操作,但我一直收到错误 "The system cannot find the file specified"。

有趣的是,当我在我的powershell中运行同一行脚本时,成功生成了加密文件。

我想知道是否有人知道这里可能出了什么问题?

我试图在我的批处理脚本中给出完整路径,并且在定义操作时还添加了开始部分的传递。

批次代码在这里::

rem @echo off 
@set path=c:\test;%path%

@set d=%date:~-4,4%%date:~4,2%%date:~-7,2% 
@set d=%d: =_% 
@set t=%time:~0,2%%time:~3,2%%time:~6,2% @set t=%t: =0%

Rem  Generate PGP encrypted file 
@echo Starting PGP... >> c:\apps\ftpLogs\test.log 
gpg2 --batch --yes -r testkey --output c:\test\foo\test_20150505.pgp --encrypt c:\test\foo\test_20150505.txt >> c:\apps\ftpLogs\test.log

我在我的 powershell 中 运行 运行良好的脚本是这一行:

gpg2 --batch --yes -r testkey --output c:\test\foo\test_20150505.pgp --encrypt c:\test\foo\test_20150505.txt >> c:\apps\ftpLogs\test.log

如果您的批处理文件不起作用,但 PowerShell 脚本可以,只需 运行 您计划任务中的 PowerShell 脚本即可。

在计划任务中,不要输入批处理文件的路径,而是指定 PowerShell.exe(或更可能是 C:\Windows\System32\WindowsPowerShell\v1.0\Powershell.exe)。然后在参数框中指定您的参数。您可能想隐藏 window,因此我们会将其包含在参数中,为此您可能会跳过加载配置文件,因此我们也会添加它。然后只需使用 -Command 参数来指定问题中的代码。

所以你的程序到 运行 框应该显示:

C:\Windows\System32\WindowsPowerShell\v1.0\Powershell.exe

然后 "Add Arguments (optional)" 框应该有:

-NoProfile -WindowStyle Hidden -command "gpg2 --batch --yes -r testkey --output c:\test\foo\test_$((get-date).ToString(yyyyMMdd)).pgp --encrypt c:\test\foo\test_$((get-date).ToString(yyyyMMdd)).txt >> c:\apps\ftpLogs\test.log"

附带说明一下,应该是 gpg2 还是 pgp2?我刚刚复制了你的命令,但我觉得他们这样命名很奇怪。

我终于解决了这个问题。问题出在用户权限上。批处理脚本假设要加密一个文件,然后 ftp 将加密的文件发送到供应商的 ftp 服务器。

显然在Windows Server 2012 中,ADMINISTRATORS 具有创建文件(这里是加密文件)的权限,而该用户没有发送它的权限。 SYSTEM用户有发送权限,没有创建权限。 (他们都在 Win Server 2012 中拥有此权限)。

所以最后我做了什么,是制作两个不同的批处理脚本任务并以 10 分钟的时间间隔安排它们。第一个是 运行 以上代码,具有 ADMINISTRATOR 权限,第二个是使用 SYSTEMS 发送。