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

批处理执行FTP命令后,如何继续运行后续命令并指定终端目录?

问题解决方法

原脚本中@FTP -i -s:"%~f0"&GOTO:EOF这一行的&GOTO:EOF会在FTP执行完毕后直接终止批处理脚本,导致后续的cd命令完全无法运行。另外,FTP通过-s参数读取当前批处理文件时,会把所有内容当作FTP命令解析,包括后面的批处理命令,这还会产生无效命令的隐性报错。

可行解决方案

方案1:用临时文件存储FTP命令(推荐,兼容性强)

这种方式彻底分隔批处理命令和FTP命令,避免冲突,同时保证后续命令正常执行:

:: 提前保存运行dev.bat的初始目录,用于最后返回
set "START_DIR=%CD%"

:: 1. 执行项目构建
cd %USERPROFILE%\Foilder\project\angular
call ng build

:: 2. 处理第一个FTP服务器
:: 生成临时FTP命令文件
echo open connection1 > ftp_tmp.cmd
echo username1 >> ftp_tmp.cmd
echo password1 >> ftp_tmp.cmd
echo cd httpdocs/project >> ftp_tmp.cmd
echo mdelete *.woff >> ftp_tmp.cmd
echo quit >> ftp_tmp.cmd
:: 执行FTP操作
ftp -i -s:ftp_tmp.cmd
:: 删除临时文件
del ftp_tmp.cmd

:: 3. 处理第二个FTP服务器(示例)
echo open connection2 > ftp_tmp.cmd
echo username2 >> ftp_tmp.cmd
echo password2 >> ftp_tmp.cmd
echo cd target/upload_path >> ftp_tmp.cmd
echo put dist/*.* >> ftp_tmp.cmd
echo quit >> ftp_tmp.cmd
ftp -i -s:ftp_tmp.cmd
del ftp_tmp.cmd

:: 4. 最终回到运行dev.bat的初始目录
cd "%START_DIR%"

:: 如果需要临时停留在指定目录(比如你提到的Subfolder),可以在返回初始目录前添加:
:: cd %USERPROFILE%\Foilder\Subfolder

方案2:用标签跳转分隔命令(无需临时文件)

依赖FTP客户端忽略标签行的特性,适合简单场景:

:: 保存初始目录
set "START_DIR=%CD%"

cd %USERPROFILE%\Foilder\project\angular
call ng build

:: 调用FTP,指定当前脚本为输入源
@ftp -i -s:"%~f0"
:: FTP执行完后,跳过FTP命令区块,执行后续批处理命令
GOTO:POST_FTP

:: --- FTP命令专属区块 ---
:FTP_CMDS
open connection
user
password
cd httpdocs/project
mdelete *.woff
quit

:: --- 后续批处理命令 ---
:POST_FTP
cd %USERPROFILE%\Foilder\Subfolder

:: 回到初始目录
cd "%START_DIR%"

可行性说明

完全可行。通过上述两种方法,既能让FTP操作结束后继续执行后续批处理命令,也能保证最终终端停留在运行dev.bat的初始目录,同时支持向多个FTP服务器传输文件。

内容的提问来源于stack exchange,提问作者An3SC

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 06:45:35