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

时间:2015-05-05 21:34:55

标签: powershell batch-file scheduled-tasks

我有批处理脚本文件,它应该使用pgp加密文件。我在任务调度程序中定义了一个任务来执行此操作,但我一直收到错误“系统找不到指定的文件”。

有趣的是,当我在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

2 个答案:

答案 0 :(得分:0)

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

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

因此,您的运行程序框应显示:

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

然后在框中显示"添加参数(可选)"应该:

-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?我刚刚复制了你的命令,但我觉得他们会这样命名。

答案 1 :(得分:0)

最后我能够解决这个问题。问题在于用户权限。批处理脚本假设加密文件然后将加密文件ftp到供应商的ftp服务器。

显然在Windows Server 2012中,ADMINISTRATORS有权创建文件(此处为加密文件),而此用户无权发送该文件。和SYSTEM用户有权发送但不能创建。 (他们都在Win Server 2012中拥有此权限)。

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