gpt4 book ai didi

batch-file - 在 Windows 批处理文件中解析和传递特殊字符

转载 作者:行者123 更新时间:2023-12-01 00:13:58 27 4
gpt4 key购买 nike

我正在尝试编写一个批处理文件,该文件可以接受用户对 FTP 链接的输入,解析出用户、密码和域,将它们写入文件并调用该文件作为 FTP 命令的输入。我已经成功地写了它,直到有人有一个带有 ! 的密码。在里面。

FTP 链接是系统生成的,可能包含特殊字符(即: !^* )。

我正在使用 setlocal delayedexpansion当我使用 ftp://userid:password@some.domain.com 在 for 循环中读取完整字符串(即: / )时, : , 和 @作为分隔符。

我试图发挥创意并做 endlocal delayedexpansion解析输出后,但 token 不起作用,因为我要结束扩展。我还尝试将每个 token 写入自己的文件,然后将文件的内容分配为变量,但没有运气。

我认为应该有一种方法可以做到这一点,但我一直在碰壁。

这是我的代码片段:

@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 个字符)。我发现这很难。

非常感谢任何和所有帮助。

最佳答案

这是微不足道的(如果你知道该怎么做)。
关键是只在禁用延迟扩展模式下扩展 FOR 参数(否则延迟扩展阶段将修改 ! 个字符)。
但是要使用可变内容,请始终使用延迟扩展模式(因为只有延迟扩展才能安全地扩展任何内容)。
因此,您需要切换模式。

引用:SO: How does the Windows Command Interpreter (CMD.EXE) parse scripts?

SETLOCAL EnableDelayedExpansion    
(
for /f "tokens=1-4 delims=/:@" %%a in ("!ftplink!") do (
SETLOCAL DisableDelayedExpansion
set "ftpdomain=%%~d"
set "ftpuser=%%~b"
set "ftppass=%%~c"

SETLOCAL EnableDelayedExpansion
echo open !ftpdomain!
echo !ftpuser!
echo !ftppass!
echo binary
echo hash
echo mget !ftpfile!
echo disconnect
echo quit
ENDLOCAL
ENDLOCAL
)
) > get.ftp

这段代码比较简单,最好用
...
(echo open !ftpdomain!)
(echo(!ftpuser!)
(echo(!ftppass!)
(echo binary)
...

圆括号避免了尾随空格的问题。 echo(后面的丑陋的左括号是为了避免空变量或变量包含问题的问题,例如 /? , ON´ or关闭`。

关于batch-file - 在 Windows 批处理文件中解析和传递特殊字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55110267/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com