Подтвердить что ты не робот

Разница между переменной%% и!! в пакетном файле

Я пишу командный файл, где мне нужно вывести строку, содержащую '!' в другой файл. Но когда я повторяю эту строку в другом файле, она удаляет "!" с выхода.

Например:  Входные данные:

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" в выходной файл.

Просьба предложить способ преодоления этой проблемы.

4b9b3361

Ответ 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 где-то выше в коде. Посмотрите здесь, чтобы узнать, какие из них есть.