在sftp命令中传入带有参数的批处理文件作为参数

Passing in batch file with parameters as parameter in sftp command

我正在尝试从 sftp 软件仓库自动化 upload/download。密码通过管道传输到 sftp 命令中。我希望批处理执行如下:

batch1.bat:

@ECHO OFF
SET usernameHost=%1
SET password=%2
SET inputLoc=%3
SET outputLoc=%4

(echo %2) | sftp -b (batch2.bat %3 %4) %1

A batch2.bat 将有一个 put/get 命令,因此它需要 inputLocoutputLoc 参数。不幸的是括号不适用,所以我不知道如何传递 batch2.bat 任何参数而不混淆此行中的 sftp 命令。

有谁知道该怎么做或可以提出替代方案吗?

这里是 sftp 命令文档:http://linux.die.net/man/1/sftp

我正在使用 Windows 和 GOW Tools cmd 扩展。

我假设 batch2.bat 生成一个 sftp 脚本(put 等),对吗?因此,您希望将其输出存储到一个临时文件(命名管道)中,并将其名称用作 sftp -b.

的参数

即使在 *nix 上,您的语法也是错误的。应该是:

sftp -b <(batch2.bat %3 %4) %1

注意 <


无论如何,这个(进程替换)在 Windows 上是不可能的。

您必须使用临时文件:

call batch2.bat %3 %4 > sftp.txt
echo %2 | sftp -b sftp.txt %1
del sftp.txt

但请注意,在 Gow (as of version 0.8.0) the sftp is just an alias to outdated psftp(版本 0.63)中。

Gow 中的 sftp 是一个批处理文件,如下所示:

@echo off
psftp %1 %2 %3 %4 %5 %6 %7 %8 %9

您应该改用 official up-to-date release of the psftp

此外 psftp 无法从重定向的输入中读取密码(*nix sftp 也不能)。

您可以改用 -pw 开关:

psftp -b sftp.txt -pw %2 %1

(注意 *nix sftp 没有 -pw 开关)


或者使用 Windows 可以在命令行上执行命令的命令行 SFTP 客户端,以避免您尝试使用的所有黑客行为。

例如 WinSCP:

@ECHO OFF
SET inputLoc=%3
SET outputLoc=%4

winscp.com /command ^
    "open sftp://user:password@host/" ^
    "put ""%inputLoc%"" ""%outputLoc%""" ^
    "exit"

(请注意,在 WinSCP 中,您在 session URL 中指定了密码以及用户名和主机名,因此我无法直接使用您当前的 %1%2 参数)

有关 WinSCP 脚本的介绍,请参阅:
https://winscp.net/eng/docs/guide_automation

(我是WinSCP的作者)


请注意,无论您最终使用什么客户端,都必须以某种方式处理主机密钥验证。

查看如何 verify the host key in WinSCP script