我有一个.bat文档,我在那里用FTP做一些操作。我想结束FTP连接,并在所需的目录上完成终端。
我试着这样做,但是当它到达quit
时,它就停止了。
cd %USERPROFILE%\Foilder\project\angular
call ng build
@FTP -i -s:"%~f0"&GOTO:EOF
open connection
user
password
cd httpdocs/project
mdelete *.woff
quit
cd %USERPROFILE%\Foilder\Subfolder
它在执行quit
后立即给我这个消息,并且从不运行下一行。
221 Goodbye.
理想情况下,运行最后一个cd
命令,并在我想要运行它的文件夹中准备好终端。问题是,我必须向两个不同的FTP服务器进行一些上传,如果控制台在我运行“dev.bat”的文件夹中完成,以使其工作,那将是非常棒的
有可能做到这一点吗?
1条答案
按热度按时间v8wbuo2f1#
您的脚本使用了一个已知的 hack,它允许您直接在批处理文件中指定
ftp
命令。%~f0
被替换为批处理文件本身的路径。因此ftp -s:%~f0
运行ftp
并告诉它使用批处理文件本身作为ftp
脚本文件。您可能已经注意到这会导致一些错误,因为ftp
在批处理文件的前几行失败,这不是有效的ftp
命令(第一、第二和第三个)。同样地,一旦
ftp
完成,批处理文件将尝试运行ftp ...
之后的所有命令,同样失败,因为这些命令不是有效的批处理文件命令。为了避免这种情况,黑客使用GOTO:EOF
跳过批处理文件的其余部分(EOF=文件的eof)。虽然你实际上想在
ftp
之后执行一些命令。至少是cd
命令。所以不要跳过批处理文件的其余部分。只跳过ftp
命令:请注意
@
在ftp
之前。这(以及GOTO:EOF
)是一个明显的标志,表明您的批处理文件所基于的脚本在第一行就以ftp
开始,除了ftp
命令之外,不包含任何其他内容。您已经偏离了这一点。或者,使用一些功能更强的FTP客户端,允许在其命令行上指定命令,而不会受到攻击。
例如,使用 myWinSCP FTP client,您可以执行以下操作:
有一个guide for converting Windows
ftp
script to WinSCP script。