You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过批处理脚本调用SFTP并执行文件上传命令

如何通过批处理脚本调用SFTP并执行文件上传命令

嗨,我之前也踩过这个坑!直接把SFTP启动命令和上传命令写在同一个批处理文件里确实行不通——因为SFTP启动后会进入交互式会话,后面的命令根本不会被自动执行。这里给你两种简单可行的解决办法:

方法一:用SFTP的命令脚本文件(推荐,适合多命令场景)

这种方式是把要执行的SFTP命令单独放在一个文本文件里,让SFTP启动时自动读取执行:

  1. 新建一个文本文件,比如命名为sftp_upload_cmds.txt,里面写入需要执行的SFTP命令:
# 上传本地dist目录到服务器指定路径
put E:\React\sage-react\dist /home/freedom/local/dist
# 执行完后退出SFTP会话
quit
  1. 在你的批处理脚本里,调用SFTP时用-b参数指定这个命令文件:
sftp -i C:\Users\Sage\.ssh\tencent -b sftp_upload_cmds.txt root@xxx.xxx.xxx.xxx

-b参数的作用就是让SFTP以批处理模式运行,自动执行文件里的所有命令,完成后自动退出,完全不需要手动交互。

方法二:通过管道直接传递命令(适合单/少量命令)

如果你的需求很简单,只有上传这一条命令,也可以不用额外的文本文件,直接在批处理里通过管道把命令传给SFTP:

echo put E:\React\sage-react\dist /home/freedom/local/dist | sftp -i C:\Users\Sage\.ssh\tencent root@xxx.xxx.xxx.xxx

要是需要执行多个命令(比如先创建目录再上传),可以用括号包裹多个echo命令:

(
echo mkdir /home/freedom/local/dist
echo put E:\React\sage-react\dist /home/freedom/local/dist
echo quit
) | sftp -i C:\Users\Sage\.ssh\tencent root@xxx.xxx.xxx.xxx

额外注意事项

  • 确保你的私钥文件C:\Users\Sage\.ssh\tencent路径正确,且当前用户有读取权限;
  • 如果目标服务器的SFTP端口不是默认的22,记得在SFTP命令里加上-P 你的端口号参数;
  • 有些SFTP服务器要求目标目录必须提前存在,如果不确定,可以在命令里先加mkdir命令创建目录。

备注:内容来源于stack exchange,提问作者SageJustus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.16 07:09:41