如何在 Batch 中读取和解析包含特殊字符的文件?我有一个名为 test.txt 的文本文件,只有 foo!!!bar
和一个批处理文件:
@echo off
setlocal enabledelayedexpansion enableextensions
FOR /F "tokens=* delims=" %%a IN (.\test.txt) DO (
echo Unquoted is %%a
echo Quoted is "%%a"
set "myVar=%%a"
echo myVar is still !myVar! or "!myVar!"
)
exit /b 0
我想要并期望它以某种方式输出 foo!!!bar
,但是这个输出:
Unquoted is foobar
Quoted is "foobar"
myVar is still foobar or "foobar"
当然我可以只type test.txt
,但我想处理文件的每一行。
最佳答案
您的问题是批处理解析器及其阶段的副作用。
FOR 参数在延迟扩展阶段扩展之前扩展。
但是当 %%a
是 foo!!bar
时,延迟扩展会删除感叹号,因为 !!
不是有效的变量扩展。
您需要切换延迟扩展,因为 %%a
的扩展只有在禁用延迟扩展的情况下才是安全的。
@echo off
setlocal DisableDelayedExpansion enableextensions
FOR /F "tokens=* delims=" %%a IN (.\test.txt) DO (
echo Unquoted is %%a
echo Quoted is "%%a"
set "myVar=%%a"
setlocal enabledelayedexpansion
echo myVar is still !myVar! or "!myVar!"
endlocal
)
关于batch-file - 在批处理中读取具有特殊字符的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10964923/