2012-06-09 4 views
3

Как читать и анализировать файл со специальными символами в пакете? У меня есть текстовый файл с именем 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, но я хочу обработать каждую строку файла.

ответ

5

Ваша проблема - побочный эффект парсерного анализатора и его фаз.

Параметры 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 
) 

Вы также можете посмотреть на How does the CMD.EXE parse...

+0

В моем случае я использовал тот же переключатель, прежде чем я пишу содержимое в файл, но получаю ошибку, пожалуйста, помогите мне – CIPHER

Смежные вопросы