dcl исполняющая программа с использованием чужой команды
Как бы вы поступили так?
У меня есть файл, который содержит около 40 строк, каждая строка является переменной для файла.exe.
Я настроил иностранную команду
$ CC := "$something$something:file.exe"
Затем я пытаюсь перебрать файл строка за строкой
{} Method1
$ OPEN a file.txt
$ loop:
$ READ/END_OF_FILE:end a b
$ CC b
$ goto loop
$ end:
Моя проблема в том, что значение b содержит кавычки (" ") вокруг него, file.exe не выполняется
Я также попытался поместить CC в начало каждой строки файла file.txt (как показано ниже) и запускать каждую строку 1 одновременно, как показано выше, но выдает ошибку, что он не может запустить CC.exe из расположения по умолчанию. Как вы можете видеть ниже, переменные 2-4 должны быть в двойных кавычках, если это имеет значение для идей метода 1.
{Способ 2}
$ CC variable1 "variable2" "variable3" "variable4"
В конце концов мне нужно выполнить около 10 из них за один раз, поэтому я думаю, что если бы я мог заставить метод 2 работать, это было бы лучшим.
2 ответа
Я не уверен, полностью ли я понимаю, чего вы пытаетесь достичь. Из того, что я прочитал, я бы для текстового файла (file.txt), как
This
That
"Quoted"
"Quoted blank"
" "
This and that
"This and" "that"
написать командную процедуру (echo.com) как
$ cc:=$sys$disk:[]echo
$ OPEN a file.txt
$ loop:
$ READ/END_OF_FILE:end a b
$ show symb b
$ CC 'b'
$ goto loop
$ end:
$ CLOSE a
который при запуске дает:
$ @echo
B = "This"
arg1: 'this'
B = "That"
arg1: 'that'
B = ""Quoted""
arg1: 'Quoted'
B = ""Quoted blank""
arg1: 'Quoted blank'
B = "" ""
arg1: ' '
B = "This and that"
arg1: 'this'
arg2: 'and'
arg3: 'that'
B = ""This and" "that""
arg1: 'This and'
arg2: 'that'
$
где echo.exe - простая программа на C для вывода argv, начинающаяся с аргумента 1 и заключенная в одинарные кавычки; и $ show symb b
просто чтобы показать, что на самом деле было прочитано из файла; содержание символов заключено в двойные кавычки.
Это более или менее то, что вы имели, кроме $ CC 'b'
где одинарные кавычки говорят dcl расширить символ b. И закрытие входного файла после прочтения - неплохая идея.
Нет, нет необходимости DEFINE
что-нибудь. Для иностранного командования вам не нужно иметь .exe
это по умолчанию.
Я смог заставить его работать, определив CC, а затем с помощью метода 2 для вызова каждой строки
DEFINE CC $something$something:file.exe;