我试图编写一个批处理文件,可以接受FTP链接的用户输入,解析出用户名、密码和域名,将它们写入文件,并将该文件作为FTP命令的输入调用。我已经成功地编写了这个程序,但是遇到了一个密码中包含
FTP链接是系统自动生成的,可能包含特殊字符(例如:
我正在使用
我尝试了一些方法,如parse输出后执行
我认为应该有一种方法可以做到这一点,但我总是遇到困难。
以下是我的代码片段:
很不幸,特殊字符可以出现在密码字符串中的任何位置,甚至可能出现在用户名中。而且,用户名和密码的长度都不统一(即:每个都是8个字符)。我是通过艰难的方式才发现这一点的。
非常感谢任何形式的帮助。
!
符号的情况。FTP链接是系统自动生成的,可能包含特殊字符(例如:
!
、^
、*
)。我正在使用
setlocal delayedexpansion
,因为我在for循环中使用/
、:
和@
作为分隔符读取完整字符串(例如:ftp://userid:password@some.domain.com
)。我尝试了一些方法,如parse输出后执行
endlocal delayedexpansion
,但是标记不起作用,因为我结束了扩展操作。我还尝试过将每个标记写入其自己的文件,然后将文件内容分配为变量,但没有成功。我认为应该有一种方法可以做到这一点,但我总是遇到困难。
以下是我的代码片段:
@ECHO OFF
setlocal enableextensions enabledelayedexpansion
echo Example FTP link:
echo.
echo "ftp://xxxxxxxx:yyyyyyyy@some.where.com"
echo.
set /p ftplink= Please enter full FTP link:
echo.
set /p ftpfile= Please provide the file name you want to download:
:FTPbat
:: Generate a bat file for FTP retrieval
for /f "tokens=1-4 delims=/:@" %%a in ("%ftplink%") do (
set ftpdomain=%%~d
set ftpuser=%%~b
set ftppass=%%~c
)
echo open %ftpdomain%> get.ftp
echo %ftpuser%>> get.ftp
echo %ftppass%>> get.ftp
echo binary>> get.ftp
echo hash>> get.ftp
echo mget %ftpfile%>> get.ftp
echo disconnect>> get.ftp
echo quit>> get.ftp
:GetFTPFile
CLS
FTP -i -s:get.ftp
这是一个FTP链接的例子:
ftp://username:pas!word@somewhere.com
很不幸,特殊字符可以出现在密码字符串中的任何位置,甚至可能出现在用户名中。而且,用户名和密码的长度都不统一(即:每个都是8个字符)。我是通过艰难的方式才发现这一点的。
非常感谢任何形式的帮助。