使用批处理脚本自动上传 WinSCP 的 SFTP 文件时出错

Error in Automation of uploading SFTP file of WinSCP using batch script

我对 WinSCP 和批处理文件脚本都很陌生。如果这个问题非常基础,请原谅。 我正在尝试使用批处理文件将文件从我的本地文件夹上传到远程文件夹。文件的名称每周都会更改。我面临 2 个问题。

  1. 我在批处理文件中使用以下代码将文件上传到 WinSCP
"C:\Program Files (x86)\WinSCP\WinSCP.com" ^
  /command ^
    open sftp://descartes:z*******s@sftp.psdataservices.com/ -hostkey="ssh-rsa 1024 ******=" ^
    "lcd  C:\Users\kajal.jain\Downloads\New folder" ^
    "cd /" ^
    "put Week 7 2022 Portal Data" ^
    "exit"

我遇到了以下错误。

Unknown command 'lcd  C:\Users\kajal.jain\Downloads\New folder'.
Same for cd 
  1. 因为要上传的文件名每周都在变。如何在 Put 命令中自动执行它?
  1. 添加引号! 因为 WinSCP 需要它的所有命令都用 double-quotes (see syntax reference here) 包围的空格,我首先在 open ... 命令周围放置一些,然后在 lcdput 命令的其他路径周围放置一些。您可以在命令中使用 two double-quotes 表示文字 "

  2. 传入文件名。 您可以使用 %1 来引用此批处理文件的第一个 command-line 参数。因此,如果您将下面的脚本保存为“upload.bat”...

"C:\Program Files (x86)\WinSCP\WinSCP.com" ^
  /command ^
    "open sftp://descartes:z*******s@sftp.psdataservices.com/ -hostkey=""ssh-rsa 1024 ******=""" ^
    "lcd  ""C:\Users\kajal.jain\Downloads\New folder""" ^
    "cd /" ^
    "put %1" ^
    "exit"

...然后您可以从命令行输入

upload "Week 7 2022 Portal Data"

让它上传那个文件(引号在那里也很重要)。

另一个选项——我会留给你去研究——如果你根本不想给它一个文件名,你可以探索使用 SET 命令这样它会做一些事情,比如总是寻找和上传一个以今天的日期命名的文件。 More info here on batch arguments and SET.