Несколько решений описаны Эриком Пемцем here. Однако для более старых версий cmd
автор был вынужден использовать внешние инструменты.
Например, программные инструменты, такие как STRINGS
Дугласа Boling, позволяет следующий код:
echo Greetings! | STRINGS hi=ASK # puts "Greetings!" into %hi%
То же самое для ASET
Ричард Брейера:
echo Greetings! | ASET hi=line # puts "Greetings!" into %hi%
Один из Альтернативой чистого Решения DOS требуют вывода программы для перенаправления в файл (с именем ANSWER.DAT
в примере ниже), а затем использует sp готовый пакетный файл. Приведу вышеупомянутую страницу:
[I] п пакетный файл, который мы должны быть в состоянии выдать команду set MYVAR={the contents of ANSWER.DAT go here}
. Это сложная задача, поскольку MS-DOS не предлагает простой способ добавить "set MYVAR="
к файлу [...]
Нормальные текстовые файлы DOS и командные файлы заканчивают все строки двумя последовательными байтами: возврат каретки (Ctrl-M, hex 0D или ASCII 13) и строка перевода (Ctrl-J, hex 0A или ASCII 10). В пакетном файле вы должны иметь возможность вставлять Ctrl-J в середине строки.
Многие текстовые редакторы имеют способ сделать это: через Ctrl-P с последующим Ctrl-J (DOS EDIT с Win95/98, VDE), с помощью префикса Ctrl-Q (Emacs, PFE), путем прямого ввода с ALT и цифровой клавиатуры (QEdit, Multi-Edit) или с помощью назначенной функциональной клавиши (Boxer). Другие редакторы абсолютно не поддерживают это (Notepad, Editpad, EDIT от MS-DOS 6.22 или ранее, VIM может вставлять переводы строк только в двоичном режиме, но не в нормальном текстовом режиме).
Если вы можете сделать это, ваш пакетный файл может выглядеть следующим образом:
@echo off
:: assume that the datafile exists already in ANSWER.DAT
echo set myvar=^J | find "set" >PREFIX.DAT
copy PREFIX.DAT+ANSWER.DAT VARIAB.BAT
call VARIAB.BAT
echo Success! The value of myvar is: [%myvar%].
:: erase temp files ...
for %%f in (PREFIX.DAT ANSWER.DAT VARIAB.BAT) do del %%f >NUL
Где вы видите^J на линии 3 выше, новая строка должна быть вложена в этой точке. Ваш редактор может отображать его как квадратную коробку со встроенным кругом.