17

我有一个批处理文件,用于通过 SFTP 将文件从本地 PC 移动到服务器。我的系统中安装了 PuTTY,批处理文件代码如下。

cd C:\Program Files (x86)\PuTTY
psftp
open <IP>
<user>
<PW>
cd /home/irisuser/iris/integration/dls_dlsblr_dlschnn_in_msg/in
lcd d:\
put log.sh
bye

当我在命令提示符下键入上面的代码时,它可以完美运行。但是当我双击该.bat文件并运行它时,它没有运行并要求输入用户名和密码。我的目标是自动化整个事情,我需要通过简单地单击.bat文件来运行它。但我无法实现它。任何想法或片段都会帮助我。

4

2 回答 2

29

您需要将 psftp 脚本(从opento的行bye)存储到一个单独的文件中,并将其传递给psftp使用-bswitch:

cd "C:\Program Files (x86)\PuTTY"
psftp -b "C:\path\to\script\script.txt"

参考:
https ://the.earth.li/~sgtatham/putty/latest/htmldoc/Chapter6.html#psftp-option-b


编辑:对于用户名+密码:由于您不能psftp在批处理文件中使用命令,出于同样的原因,您不能将用户名和密码指定为psftp命令。这些是open命令的输入。虽然您可以使用open命令 ( open <user>@<IP>) 指定用户名,但不能以这种方式指定密码。这只能在psftp命令行上完成。然后在命令行上执行所有操作可能会更干净:

cd "C:\Program Files (x86)\PuTTY"
psftp -b script.txt <user>@<IP> -pw <PW>

并从您open的.<user><PW>script.txt

参考:
https ://the.earth.li/~sgtatham/putty/latest/htmldoc/Chapter6.html#psftp-starting
https://the.earth.li/~sgtatham/putty/latest/htmldoc/Chapter3.html #using-cmdline-pw


你在 atm 做的是你在psftp没有任何参数或命令的情况下运行。一旦你退出它(比如通过键入bye),你的批处理文件会继续尝试运行open命令(和其他命令),这显然是 Windows shell 不理解的。


如果您真的想将所有内容保存在一个文件(批处理文件)中,您可以将命令写入 psftp 标准输入,例如:

(
    echo cd ...
    echo lcd ...
    echo put log.sh
) | psftp <user>@<IP> -pw <PW>

虽然这有副作用。例如,如果主机不知道 plink(例如,如果您第一次在新机器上或在另一个本地帐户下运行它,例如在任务计划程序下),则第一行输入将作为对主机的响应键提示。y除//i之外的任何内容都Enter被解释为n(仅连接一次,不将密钥添加到缓存中),因此即使是cd命令。并且脚本的其余部分将失败,因为cd不会发生。

于 2013-05-08T12:16:47.533 回答
0
set DSKTOPDIR="D:\test"
set IPADDRESS="23.23.3.23"

>%DSKTOPDIR%\script.ftp ECHO cd %PAY_REP%
>>%DSKTOPDIR%\script.ftp ECHO mget *.report
>>%DSKTOPDIR%\script.ftp ECHO bye

:: run PSFTP Commands
psftp <domain>@%IPADDRESS% -b %DSKTOPDIR%\script.ftp

在上述行之前使用 set 命令设置值。

我相信这对你有帮助。

请参阅以下链接的 psfpt 设置https://www.ssh.com/ssh/putty/putty-manuals/0.68/Chapter6.html

于 2019-02-16T12:44:37.647 回答