我想要一个 Windows 计划任务来执行 FTP 批处理文件,该文件会将一些文件上传到我的服务器。如果我从命令行运行下面的参数,那么它将成功执行。
ftp -i -s:C:\<path-to-file>\ftp.dat
当我尝试通过计划任务运行此程序时,它总是进入创建的任务流程并保持这种状态;它不会完成或失败。我也尝试过不使用 put 命令,但它仍然会执行此操作,所以它并不是在等待传输文件。
我正在通过任务调度程序 GUI 创建任务Windows Vista。在常规选项卡下,无论用户是否登录,我都运行并以最高权限设置运行。
在操作下,它被设置为运行C:\\Windows\System32\cmd.exe
。
论点是
ftp -i -s:C:\<path-to-file>\ftp.dat
ftp.dat 文件如下所示:
open ftp.mysite.co.uk
myUsername
myPassword
put C:\<path-to-file>\file.xml
put C:\<path-to-file>\file2.xml
bye
我不明白为什么从命令行手动运行得很好,但从计划任务运行却不行。
答案1
/c
当您添加参数来cmd.exe
运行命令时它应该可以工作( ftp
):
C:\Windows\System32\cmd.exe
/c ftp -i -s:C:\<path-to-file>\ftp.dat
您还可以在命令行上尝试这个“整个”操作:
cmd /c ftp -i -s:C:\<path-to-file>\ftp.dat
如果没有/c
它,只会在控制台内打开一个控制台,注意执行命令。
答案2
我的建议是VB脚本计划任务中的脚本:
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run "C:\Windows\System32\ftp.exe -i -s:C:\<path-to-file>\ftp.dat", , True
与尝试安排命令相比,我安排 VBScript 脚本的运气总是更好一些。
答案3
听起来似乎仍然存在权限或文件访问问题,因为当不使用 UI 运行时,环境的某些部分不可用。很可能是文件或路径不可用,因为我们不知道去哪里...
最好的办法是记录输出ftp
以查看是否有错误。如果将来出现类似这样的问题,那么检查一下会很有用:
ftp -i -s:C:\<path-to-file>\ftp.dat >c:\ftp.log
您可以将日志文件放入,但如果由于某种原因您无法访问该文件夹,它将不会提供日志,因此在排除该可能性之前,最好将其保存在根目录中。一旦您排除了该问题,您就可以将其移动到更合适的位置。