作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在编写一个批处理脚本来读取文件。该文件包含诸如 token=value 之类的行。我有代码来解析文件的每一行,它存储在 %%i 中。以下代码尝试提取 token 的值:
请注意,如评论中所述,此脚本正在使用延迟扩展。
for /f "tokens=1* delims==" %%a in ("%%i") do (
if "%%a"=="password" ( set password=%%b )
)
如果 token 密码的值包含“!”,则“!”被跳过,只有字符串的其余部分存储在变量密码中。例如,如果该行是:
密码=测试!
然后变量 password=Test 。我尝试以各种方式更改输入文件,批处理脚本读取除“!”以外的所有内容。我用过:
密码="测试!"
密码="测试^!"
password=Test%!
密码=测试%!
一切都会跳过“!”。知道如何用“!”读取字符串吗?变成一个变量?
最佳答案
假设您正在使用延迟变量扩展,只需暂时将其禁用以进行比较。为了在非延迟模式下进行比较,我将通过 !
解析当前行拆分并检查第一个标记是否与整行相同:
@echo off
setlocal enableDelayedExpansion
for /f "delims=" %%i in (sourcefile.txt) do (
setlocal disableDelayedExpansion
for /f "delims=! tokens=1" %%z in ("%%i") do (
if "%%z"=="%%i" ( rem The line has no !
for /f "tokens=1* delims==" %%a in ("%%i") do (
if "%%a"=="password" ( set "password=%%b" )
)
)
)
endlocal
)
pause
然而,password
变量仅在内部 setlocal 上下文中可用,要导出它,请使用 that answer .
关于windows - 如何从 Windows 批处理脚本中的文件中读取带有 "!"的字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32873578/
我是一名优秀的程序员,十分优秀!