我有一个简单的ftp上传脚本,关键是我要将主机名,用户名,密码等参数传递到bat
文件中。
这是我的剧本
@ftp -i -s:"%~f0"&GOTO:EOF
open %1
%2
%3
!:--- FTP commands below here ---
lcd "%4"
cd %5
binary
put "%6"
disconnect
bye
现在,当我从命令行调用脚本并传入%1
,%2
时,%1
,%2
内容将不会被替换为我的命令行参数。这是我的命令行:
ftp.bat "first" "second" "third" "forth" "five" "six"
而不是%1
成为first
,%2
变为second
,依此类推,%1
仍为%1
,所以基本上我正在打开一个名为%1
的ftp端,完全没有意义。
我做错了什么?
答案 0 :(得分:1)
那是因为,在您实际处理文件时,它根本不是批处理脚本。
这是一个FTP脚本,它不做任何花哨的替换。
您可以使用临时文件(基于原始文件以避免冲突)获得所需的效果:
@setlocal enableextensions enabledelayedexpansion
@echo off
set tmpfl=%~f0.tmp
echo>"%tmpfl%" open %1
echo>>"%tmpfl%" %2
echo>>"%tmpfl%" %3
echo>>"%tmpfl%" lcd "%4"
echo>>"%tmpfl%" cd %5
echo>>"%tmpfl%" binary
echo>>"%tmpfl%" put "%6"
echo>>"%tmpfl%" disconnect
echo>>"%tmpfl%" bye
type "%tmpfl%" && rem ftp -i -s:"%tmpfl%"
del /q "%tmpfl%"
endlocal
type
行在那里进行调试。当您对脚本感到满意时,请更改:
type "%tmpfl%" && rem ftp -i -s:"%tmpfl%"
为:
ftp -i -s:"%tmpfl%"
答案 1 :(得分:0)
问题在于您将有问题的文件作为一组命令传递给ftp,并使用-s开关 - “%~f0”扩展为批处理文件的完全限定文件名。因此,ftp客户端逐字解析文件,它不会用参数替换%1,%2等。这是由批处理文件处理程序完成的,而不是ftp客户端。
您可以尝试使用“echo open%1> temp.txt”等编写临时文件,然后将其用作ftp客户端的输入。
以下似乎在我的系统上运行良好:
echo open %1 > temp1.txt
echo %2 >> temp1.txt
echo %3 >> temp1.txt
rem !:--- FTP commands below here ---
echo lcd "%4" >> temp1.txt
echo cd %5 >> temp1.txt
echo binary >> temp1.txt
echo put "%6" >> temp1.txt
echo disconnect >> temp1.txt
echo bye >> temp1.txt
@call ftp -i -s:"temp1.txt"&GOTO:EOF