批处理执行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
相关产品推荐
相关产品推荐

