Недавно я экспериментировал с некоторыми сценариями автоматизации, и для некоторых целей полезен ввод текста для ввода информации, которая поможет программе. Однако вместо того, чтобы делать это построчно, каждое слово вводится как sep, я бы предпочел читать их как переменные, используя переменные параметров пакетов, а затем использовать их для запуска соответствующей пакетной программы.

set /p main=".\ "
set arg1=%1
set arg2=%2
set arg3=%3
set arg4=%4
%~d0\software\%1.bat %arg2% %arg3% %arg4% %arg5% 

Это сработало, когда я сделал это прошлой ночью. Теперь этого не произойдет, и я пытаюсь выяснить, в чем ошибка. Спасибо за любую помощь.

-1
user3671588 1 Янв 2020 в 19:08

2 ответа

Вот еще один вариант, который был обнаружен на DosTips.com. Он использует синтаксис подстановки строк, который создает оператор SET для каждого имеющегося у вас разделителя. Это позволяет коду быть немного более динамичным, поскольку он создает массив переменных и не зависит от того, сколько аргументов пользователь может или не может ввести.

@echo off
setlocal EnableDelayedExpansion

set /p main=".\ "

set i=1
set "arg!i!=%main: =" & set /A i+=1 & set "arg!i!=%"
set arg
pause

И вот скрипт запущен.

.\ arg1 &arg2 |arg3| <arg4>
arg1=arg1
arg2=&arg2
arg3=|arg3|
arg4=<arg4>
Press any key to continue . . .

И снова, чтобы показать вам, что это не ограничивается количеством аргументов.

.\ Jack and Jill ran up the hill
arg1=Jack
arg2=and
arg3=Jill
arg4=ran
arg5=up
arg6=the
arg7=hill
Press any key to continue . . .

Я должен отметить, что этот код будет иметь проблемы с восклицательными знаками на входе. В пакетном режиме всегда сложно подтвердить ввод. Вот почему сегодня у нас есть хакеры.

3
Squashman 1 Янв 2020 в 23:53

Это может помочь вам:

set /p main=".\ "
for /f "tokens=1,2,3,4 delims= " %%a in ('echo %main%') do set arg1=%%a & set arg2=%%b & set arg3=%%c & set arg4=%%d
Rem do anything with these
0
Wasif Hasan 1 Янв 2020 в 19:22
Идеально! Спасибо.
 – 
user3671588
1 Янв 2020 в 19:59
Спасибо. Подтвердите ответ, щелкнув серую галочку.
 – 
Wasif Hasan
1 Янв 2020 в 20:23
2
Это может сработать для вас в зависимости от строки данных, введенной при появлении запроса, но это далеко не идеально. Например, запустите пакетный файл с этим кодом из окна командной строки, введите в приглашении arg1 &arg2 |arg3| <arg4> и посмотрите, что произойдет. Лучше будет вторая строка for /F "tokens=1-4 delims= " %%I in ("%main%") do set "arg1=%%I" & set "arg2=%%J" & set "arg3=%%K" & set "arg4=%%L", но она все же небезопасна, например, при вводе строки с одной или несколькими двойными кавычками. Требуется if defined main set "main=%main:"=%" выше FOR .
 – 
Mofi
1 Янв 2020 в 20:27