Причиной является расширение с задержкой, если вы отключите его, также! работать как положено.
Вы можете отключить его только для цикла.
if errorlevel 1 (
echo. >>%NF%
) else (
setlocal DisableDelayedExpansion
for /f "tokens=1 delims=" %%a in ('findstr /N /R "." %EF%^|findstr /B /C:"%1:"') do (
if [%%a] EQU [] (
echo. >>%NF%
) else (
echo %%a >>%NF%
)
)
endlocal
)
Анализатор для партийных линий имеет несколько фаз:
Первая фаза - это расширение% var%, затем фаза специальных символов "^ <> & | ()
и после фазы %% a задерживается (фаза восклицания).
Вот почему! исчезнуть в вашем случае.
Потому что вы получили что-то подобное из своего файла
%% а = Hello!
Затем восклицательный этап пытается расширить!, Но это не удается и он удаляется.
Если в вашем файле есть строка
Привет ^!
ты попал в свою "копию"
Здравствуйте!
Но в пакетном файле вам нужно две каретки, чтобы отобразить одну!
echo hello^^!
Потому что в фазе 2 ^^! надувается до ^ !, и в восклицательном знаке последняя каретка избегает!