Windows 提取包含完整字符串分隔符的字符串

Windows 提取包含完整字符串分隔符的字符串,windows,batch-file,batch-processing,Windows,Batch File,Batch Processing,我有一个小批量脚本,可以从mysql.err文件中获取临时密码 但当密码包含分隔符匹配中使用的:时,我遇到了一个问题。生成的密码将无法按原样获取 有没有其他方法可以正确获取密码 @echo off setlocal enableextensions enabledelayedexpansion set mysql_dir=C:\database\mysql echo. echo. echo Search For Current MySQL Password FOR /F "tokens=4

我有一个小批量脚本,可以从
mysql.err
文件中获取临时密码

但当密码包含分隔符匹配中使用的
时,我遇到了一个问题。生成的密码将无法按原样获取

有没有其他方法可以正确获取密码

@echo off

setlocal enableextensions enabledelayedexpansion

set mysql_dir=C:\database\mysql

echo.
echo.
echo Search For Current MySQL Password
FOR /F "tokens=4 delims=:" %%G in ('find /I "A temporary password is generated for root@localhost:" ^<%mysql_dir%\data\%ComputerName%.err') DO set temp_mysql_password="%%G"

echo.
echo.
echo Current MySQL password: %temp_mysql_password%
而问题在于密码
v>dqu;;&)7:Y
**包含
的将被提取为:

v>dqu;;&)7

这样,在没有分隔符的情况下,它可以工作:

...
for /F "delims=" %%G in ('find /I "A temporary password is generated for" ^<%mysql_dir%\data\%ComputerName%.err') do (
   set "temp_mysql_password=%%G"
   set "temp_mysql_password=!temp_mysql_password:*A temporary password is generated for root@localhost: =!"
)


echo.
echo.
rem Note the ! around the variable
echo Current MySQL password: !temp_mysql_password!
输出:

Current MySQL password: v>dqu;;&)7:Y

要使用您的解决方案(使用
令牌
delims
),您可以将所有分隔的部分合并,请参阅。

如果您使用了“令牌=3*delims=:”,那么下一个变量%%H将获得未解析的密码。
星号表示输入的剩余部分,不在delims处进一步拆分

@echo off & setlocal enableextensions enabledelayedexpansion
set mysql_dir=C:\database\mysql
echo.
echo.
echo Search For Current MySQL Password
FOR /F "tokens=3* delims=:" %%G in (
    'find /I "A temporary password is generated for root@localhost:" ^<%mysql_dir%\data\%ComputerName%.err'
) DO set "temp_mysql_password=%%H"
set "temp_mysql_password=%temp_mysql_password:~1%"
echo.
echo.
echo Current MySQL password: %temp_mysql_password%
@echo off&setlocal enableextensions enabledelayedexpansion
设置mysql\u dir=C:\database\mysql
回声。
回声。
回显搜索当前MySQL密码
对于/F“tokens=3*delims=:”%%G in(

“查找/I”为生成临时密码root@localhost:“^谢谢您的时间!它是否按预期工作。祝您好运!密码将是:
“v>dqu;;&)7:Y”
(带引号)。使用:
回显当前MySQL密码:^
进行测试。但是,即使set命令(导致引号)是正确的:
set“temp\u mysql\u password=%%H”
也会以空格开头。好的,这可以很容易地删除,所以在更正之后,这仍然是一个很好的答案。请注意,它只适用于:
root@localhost
@AndreKampling同意,我没有彻底修改代码。已更改。在将搜索字符串更改为“仅
”时,会为“
Current MySQL password: v>dqu;;&)7:Y
@echo off & setlocal enableextensions enabledelayedexpansion
set mysql_dir=C:\database\mysql
echo.
echo.
echo Search For Current MySQL Password
FOR /F "tokens=3* delims=:" %%G in (
    'find /I "A temporary password is generated for root@localhost:" ^<%mysql_dir%\data\%ComputerName%.err'
) DO set "temp_mysql_password=%%H"
set "temp_mysql_password=%temp_mysql_password:~1%"
echo.
echo.
echo Current MySQL password: %temp_mysql_password%