MSDOS 4.0 манипулирование строками?

485
vanowm

Из-за очень старого оборудования я вынужден запустить Windows 3.1, которая управляет плоттером. Программное обеспечение, которое я использую, создает файл .bat со следующей строкой:

SPLOT.EXE/fmyfile.uc c:\myfile.plt 

/ f - это параметр, который следует по имени файла для преобразованного выходного файла. Проблема возникает, когда имя файла начинается с номера 1 или 2, затем splot.exe пытается вывести на порты COM1 или COM2 вместо создания файла .uc. Поскольку я не могу контролировать, как этот файл .bat создавался, мое единственное решение - создать собственный файл splot.exe как «загрузчик», который будет выполнять оригинальный файл splot.exe (я переименовал его в splotOrg.exe) с временным именем файла, затем переименуйте этот временный файл в правильное имя файла.

Поэтому я придумываю следующий файл .bat, который позже преобразовал в .exe с помощью Advanced BAT в EXE Converter :

@echo off set str=%1 splotOrg.exe/ftempfile %2 ren tempfile %str:~2% 

Это прекрасно работало из окна Windows 7 CMD, но когда я запустил его из истинной MSDOS 4.0, это не удалось. Оказалось, что % str: ~ 2%, который должен обрезать первые 2 символа из переменной% str%, работает только с расширениями Windows 98+ или чем-то в этом роде.

К сожалению, я не знаю языков программирования низкого уровня, поэтому я ограничен простыми языками сценариев.

Может кто-нибудь предложить, как я могу создать файл .exe для MSDOS 4.0, который будет делать следующее:

  1. принять два аргумента командной строки, разделенных пробелом, давайте назовем их $ arg1 и $ arg2
  2. выполнить: splotOrg.exe/ftempfile $arg2
  3. вырежьте / f из $ arg1, чтобы /fmyfile.uc стал myfile.uc
  4. переименуйте tempfile в новое имя $ arg1
1
Вы пишете: «Не знаю языков программирования низкого уровня, поэтому я ограничен простыми языками сценариев» <- нет, разве вы не слышали о языке программирования высокого уровня? незнание языка программирования низкого уровня не ограничивает вас так сильно barlop 7 лет назад 0

2 ответа на вопрос

2
TOOGAM

Вы упоминаете об использовании Advanced BAT в EXE Converter . Согласно этому веб-сайту, исполняемые файлы «Исполняемые файлы, скомпилированные с помощью Advanced BAT to EXE Converter, будут работать на всех версиях Windows от Windows98 до Win8.1 64bit». Это не говорит MS-DOS 4.0

Решение доступно с использованием 4DOS от JP Software. Скорее всего, подойдет любая версия, но вы также можете скачать последнюю версию "Free 4DOS" с сайта 4DOS .

Вы, вероятно, можете сойти с рук:
ren *.* tempfile

В противном случае, если по какой-то причине это не сработает, вы сможете проделать долгий путь, а именно обрезать нежелательные символы с помощью% @ instr [] (см .: JP Software for @Instr . Например, %@instr[2,%@len[%2],%2]) (или, для более старых версий 4DOS,% @ substr [].) Вы должны делать это хорошо, если у вас нет запятых в именах файлов (которые в любом случае не используются / не поддерживаются в именах файлов в MS-DOS).

Если ваши конвертированные в exe пакетные файлы не поддерживают расширения 4DOS, просто запустите их: 4DOS.Com/C mybatch.btm %1 %2

Большое спасибо! Я пошел с вашим последним предложением использовать 4dos для запуска скрипта .btm, потому что при установке 4dos заменяет стандартные команды MSDOS своими собственными, что не было бы проблемой, если бы он оставлял стандартные переключатели для этих команд, к сожалению, этого не происходит и ломается другие командные файлы. Кроме того, просто дважды проверил и удивительно, что я использую MS-DOS 6.0, что объясняет, почему конвертер bat в exe работал. vanowm 8 лет назад 0
Рекомендуется: не используйте MS-DOS 6.0. Используйте MS-DOS 6.22. Обновление с 6.0 до 6.22 легально получить бесплатно. (Вы можете поискать что-то вроде «MS-DOS 6.22 Step Up».) TOOGAM 8 лет назад 2
0
mwfearnley

This may be a bit of a long shot, but it sounds like the string 'SPLOT.EXE/f' may be hard-coded into your plotter program.

If you can find it and change it to something like 'MYBAT.EXE ' (with two spaces at the end), then you could point it to a batch file that looks something like:

@echo off splotOrg.exe/ftempfile %2 ren tempfile %1 

Похожие вопросы