2017-01-21 2 views
2

Я написал программу, которая возвращает коды ключей как целые числа для DOS , но я не знаю, как получить его вывод как переменную.MS-DOS как получить вывод команды как переменной

Примечание: Я использую MS-DOS 7/Windows 98, поэтому я не могу использовать FOR /F или SET /P

Кто-нибудь знает, как я мог бы сделать это?

ответ

2

Несколько решений описаны Эриком Пемцем 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 выше, новая строка должна быть вложена в этой точке. Ваш редактор может отображать его как квадратную коробку со встроенным кругом.

Смежные вопросы