在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 命令,因此它需要 inputLoc
和 outputLoc
参数。不幸的是括号不适用,所以我不知道如何传递 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的作者)
请注意,无论您最终使用什么客户端,都必须以某种方式处理主机密钥验证。
我正在尝试从 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 命令,因此它需要 inputLoc
和 outputLoc
参数。不幸的是括号不适用,所以我不知道如何传递 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的作者)
请注意,无论您最终使用什么客户端,都必须以某种方式处理主机密钥验证。