Интерпретатор CMD - вывод переменных со спецсимволами на экран и в файл

Известная, но слабоосвещенная тема - обработка в коммандном интерпретаторе CMD данных со спецсимволами.
В большинстве ситуаций она вполне решаема...
Плюс к этому периодически возникают задачи вывода в файл без перевода строки.
Несколько лет назад (на ру-борде) я выкладывал семпловый код, который достаточно подробно иллюстрирует примеры возможной работы:

@ECHO OFF&CLS
(ECHO Обработка переменных со спецсимволами "(", ")","&","|",">","<")
(ECHO SET "AAA=сообщение()&|<>команда")
SET "AAA=сообщение()&|<>команда"

(ECHO Вывод на экран с обрамляющими двойными кавычками)
(ECHO ^(ECHO "%%AAA%%"^))
(ECHO "%AAA%")

(ECHO Перенаправление значения переменной в файл file.txt с переводом строки то есть с CR/LF)
(ECHO с заменой существующего file.txt)
(ECHO SET /p"=%%AAA%%"^<nul 1^>file.txt^&ECHO.^>^>file.txt)
SET /p"=%AAA%"<nul 1>file.txt&ECHO.>>file.txt

(ECHO Перенаправление значения переменной в файл file.txt с переводом строки то есть с CR/LF)
(ECHO дописыванием в существующий file.txt)
(ECHO SET /p"=%%AAA%%"^<nul 1^>^>file.txt^&ECHO. 1^>^>file.txt)
SET /p"=%AAA%"<nul 1>>file.txt&ECHO. 1>>file.txt

(ECHO Перенаправление значения переменной в файл file1.txt без перевода строки то есть без CR/LF)
(ECHO с заменой существующего file1.txt)
(ECHO SET /p"=%%AAA%%"^<nul 1^>file1.txt)
SET /p"=%AAA%"<nul 1>file1.txt

(ECHO Перенаправление значения переменной в файл file1.txt без перевода строки то есть без CR/LF)
(ECHO с дописыванием в существующий file1.txt)
(ECHO SET /p"=%%AAA%%"^<nul 1^>^>file1.txt)
SET /p"=%AAA%"<nul 1>>file1.txt

(ECHO Вывод значения переменной на экран с переводом строки то есть с CR/LF)
(ECHO SET /p"=%%AAA%%"^<nul^&ECHO.)
(ECHO ^(ECHO Вторая строка^))
SET /p"=%AAA%"<nul&ECHO.
(ECHO Вторая строка)

(ECHO Вывод значения переменной на экран без перевода строки то есть с CR/LF)
(ECHO SET /p"=%%AAA%%"^<nul)
(ECHO ^(ECHO Вторая строка^))
SET /p"=%AAA%"<nul
(ECHO Вторая строка)

(ECHO Метод предварительной подготовки: )
(ECHO SET "AAA=%%AAA:&=^&%%")
(ECHO SET "AAA=%%AAA:|=^|%%")
(ECHO SET "AAA=%%AAA:<=^<%%")
(ECHO SET "AAA=%%AAA:>=^>%%")
(ECHO SET "AAA=%%AAA:(=^(%%")
(ECHO SET "AAA=%%AAA:)=^)%%")
SET "AAA=%AAA:&=^&%"
SET "AAA=%AAA:|=^|%"
SET "AAA=%AAA:<=^<%"
SET "AAA=%AAA:>=^>%"
SET "AAA=%AAA:(=^(%"
SET "AAA=%AAA:)=^)%"
(ECHO ^(ECHO %%AAA%%^))
(ECHO %AAA%)
PAUSE

Кодировка приведенного скрипта CP866.
Для ознакомления рекомендуется выполнить ;)
Само-собой в случае вопросов постараюсь ответить...

Комментарии

Как отписаться от вашей рассылки?

В левом нижнем углу поле для ввода мыла. При этом поставить галочку на "отписаться" и нажать кнопку "добавить"

---
упс..

Сорри конечно - я на выходных поправил сотни страниц и при этом отключить рассылку забыл :(

---
упс..

Страницы

Похожие материалы по этой теме на сайте

Содержимое
Скрипты для CMD

Скрипты выполняемые интерпретатором CMD.EXE - стандартной консольной оболочкой для Win2000/WinXP/Vista/Seven/Win8/Win2000 Server/Win2003/Win2008.

Страховое копирование по списку

Относительно простой вариант резервного копирования по списку файлов/папок с учетом типа резервной копии и количества хранимых копий по типам. Классические типы: дневная-недельная-месячная-годовая копии. Кодировка скрипта CP866....

Преобразование файлов 1CClientBankExchange в табличную форму

Лично мне периодически приходилось сталкиваться с обработкой данных не в табличной форме, а в "именованном формате" то есть когда каждый параметр пишется на отдельной строке в виде Параметр=Значение параметра причем файл...

Чтение данных из реестра в переменную окружения

Продвинутый кросплатформенный модуль для встраивания в скрипты, позволяющий в удобной форме получать данные из реестра для дальнейшего использования(как всегда - кодировка скрипта CP866):

Выключение компьютеров в домене по списку
Монолитный скрипт выключения компьютеров в домене по списку:
@ECHO OFF
SET "BEGIN_MARKER=:ENDFILE1"
SET "END_MARKER=:ENDFILE2"
Логофф сессий отключенных пользователей на терминальном сервере

Убить все отключенные сессии:

@ECHO OFF
FOR /F "USEBACKQ TOKENS=2 DELIMS= " %%a IN (`quser^|findstr /b /v "^>"^|findstr /i /v " ID "^|findstr /v /i "rdp-tcp"`) DO logoff %%~a
EXIT 0
Поддержка папок для сканирования

Часто в офисе присутствуют сетевые устройства сканирования, которые поддерживают сканирование в сетевую папку. Все бы было хорошо если бы для этих устройств

Перевод столбца в строку

Преобразование столбца в строку с заданными разделителями и обрамлением. Кодировка скрипта CP866.
Символ двойной кавычки при этом не удастся использовать как разделитель или обрамление.