ano*_*mal 3 io for-loop batch-file special-characters
如何在批处理中读取和解析具有特殊字符的文件?我有一个名为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
Run Code Online (Sandbox Code Playgroud)
我希望并期望它以foo!!!bar某种方式输出,但这输出:
Unquoted is foobar
Quoted is "foobar"
myVar is still foobar or "foobar"
Run Code Online (Sandbox Code Playgroud)
当然我可以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
)
Run Code Online (Sandbox Code Playgroud)
您还可以查看CMD.EXE如何解析...
| 归档时间: |
|
| 查看次数: |
4386 次 |
| 最近记录: |