【问题标题】:Passing in batch file with parameters as parameter in sftp command在 sftp 命令中传入带有参数的批处理文件作为参数
【发布时间】:2015-07-26 08:27:20
【问题描述】:

我正在尝试从 sftp 库自动上传/下载。密码通过管道传送到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

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

有谁知道如何做到这一点或可以提出替代方案?

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

我正在使用带有 GOW Tools cmd 扩展的 Windows。

【问题讨论】:

  • FTP 通常可以使用自己的命令。 batch2.bat 有什么作用?也向我们展示它的代码。

标签: batch-file parameters command sftp


【解决方案1】:

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

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

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

注意&lt;


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

你必须使用一个临时文件:

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

但请注意,在Gow(0.8.0 版)中,sftp 只是过时的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 客户端,以避免您尝试使用的所有 hack。

例如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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 2010-11-20
    • 2015-08-25
    • 1970-01-01
    • 1970-01-01
    • 2016-07-03
    相关资源
    最近更新 更多