系统找不到指定的文件 - 任务计划程序
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 发送。
我有批处理脚本文件,它应该用 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 发送。