使用WinSCP使用SFTP上载带时间戳的文件

时间:2015-05-07 19:40:02

标签: batch-file sftp winscp

我正在制作一个批处理文件,将文件上传到SFTP服务器上的一个特定文件夹。当我使用任务计划程序运行该文件时,它显示没有错误,但没有任何内容上载到客户端的SFTP文件夹中。这是我的批处理脚本:

System.load("PATH")

1 个答案:

答案 0 :(得分:1)

批处理文件中存在很多问题。我至少可以确定:

  • 您设置环境变量upload(由于我不理解的原因),您不使用它。直接调用WinSCP:

    winscp.exe /console /command ...
    
  • 虽然没有严格错误,但使用批处理文件中的winscp.exe(GUI应用程序)会使调试变得复杂(它会启动一个单独的窗口或WinSCP进程)。请改用winscp.com (console application)。对于winscp.com/console参数是多余的:

    winscp.com /command ...
    
  • 您使用文件名"c:\apps\ftpfiles\name_%d%.txt",就好像它是一个命令一样。如果您要上传此特定文件,请使用put command

    中的路径
    "put c:\apps\ftpfiles\name_%d%.txt"
    
  • 您错过open commandverify your server's hostkey-hostkey开关。

  • 您错过了exit command(以及close冗余之前的exit

  • date环境变量中获取时间戳是不可靠的(date的值是特定于语言环境的)。使用WinSCP %TIMESTAMP% construct

    "put c:\apps\ftpfiles\name_%TIMESTAMP#yyyymmdd%.txt"
    

    (您需要为%TIMESTAMP%使用WinSCP 5.7或更高版本。)

  • 使用最新版本的WinSCP,option confirm off is unnecessary

所有应用,您的批处理文件将包含一个命令:

@echo off

winscp.com /command ^
    "open sftp://user:pass@example.com -hostkey=""your-servers-hostkey""" ^
    "put c:\apps\ftpfiles\name_%%TIMESTAMP#yyyymmdd%%.txt" ^
    "exit"