您需要将 psftp 脚本(从open
to的行bye
)存储到一个单独的文件中,并将其传递给psftp
使用-b
switch:
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
不会发生。