Разница между переменной%% и!! в пакетном файле
Я пишу командный файл, где мне нужно вывести строку, содержащую '!' в другой файл. Но когда я повторяю эту строку в другом файле, она удаляет "!" с выхода.
Например:
Входные данные:
set LINE=Hi this is! output
echo !LINE!>>new_file.txt
Вывод в файле new_file.txt:
Hi this is output
Кроме того, если вход
set LINE=Hello!! this is output!!
echo !LINE!>>new_file.txt
Вывод в файле new_file.txt:
Hello
Следовательно, он пропускает! (Восклицательный знак) с выхода на новый_файл.
Если я использую% LINE%, тогда он просто отображает "echo is on" в выходной файл.
Просьба предложить способ преодоления этой проблемы.
Ответы
Ответ 1
Если вы задерживаете расширение и хотите вывести восклицательный знак, вам нужно его избежать.
Для экранирования восклицательных знаков не требуется ни один, ни два кармана, в зависимости от места размещения.
@echo off
set test1=Test1!
setlocal EnableDelayedExpansion
set test2=Test2^^!
set "test3=Test3^!"
echo !test1!
echo !test2!
echo !test3!
Разница между !var!
и %var%
в блоках объясняется в DOS: почему мои заданные команды приводят к тому, что ничего не сохраняется?
Объяснение паркового парсера можно найти в Как интерпретатор сценариев Windows Command Interpreter (CMD.EXE)?
Ответ 2
Кажется, вы назвали SETLOCAL EnableDelayedExpansion
где-то выше в коде. Посмотрите здесь, чтобы узнать, какие из них есть.