【问题标题】:Reading a file with special characters in Batch批量读取带有特殊字符的文件
【发布时间】:2012-06-09 22:04:32
【问题描述】:

如何批量读取和解析带有特殊字符的文件?我有一个名为 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,但我想处理文件的每一行。

【问题讨论】:

    标签: batch-file for-loop io special-characters


    【解决方案1】:

    您的问题是批处理解析器及其阶段的副作用。

    在扩展延迟扩展阶段之前扩展 FOR 参数。
    但是当%%afoo!!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
    )
    

    你也可以看看How does the CMD.EXE parse...

    【讨论】:

    • 在我的情况下,我在将内容写入文件之前使用了相同的切换,但出现错误请帮助我
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-05
    • 1970-01-01
    • 1970-01-01
    • 2021-08-05
    相关资源
    最近更新 更多