Как проверить, сколько входных данных пользователь ввел в пакетный файл?

#batch-file

#пакетный файл

Вопрос:

Итак, я пытаюсь создать скрипт, который, если пользователь вводит «listproc 100», отображает список задач и фильтрует значение PID, если оно больше или равно 100, и если пользователь вводит 2 ввода, например, «listproc 100 500», он будет выполнять список задач из значений PID, которые больше или равныдо 100, а также меньше или равно 500.Однако я использую goto, есть ли способ, которым я могу это сделать, не спрашивая пользователя, ввели ли они 1 или 2 входных данных, и иметь возможность заставить скрипт работать самостоятельно.Итак, для exmaple, если бы я ввел «listproc 100 500», он показал бы результат, и мне не нужно было спрашивать, ввел ли я 1 или 2 ввода.

 @echo off

set /p "input=1 or 2 inputs"

REM asks user how many inputs they entered

if "%input%" == "1" (
    goto one
)

if "%input%" == "2" (
    goto two
)

REM filters depending on number of inputs

:one
tasklist /FI "PID ge %1"

:two
tasklist /FI "PID ge %1" /FI "PID le %2"

 

Комментарии:

1. Вы переходите в цикл пользовательских запросов, где вводите их по одному входу за раз, подсчитываете время в цикле, пока они не введут quit или q или что-то в этом роде. Другой вариант — получить их все в одной строке, а затем обработать ее в цикле. Видишь help for .

2. «listproc 100 500» предполагает, что вы не хотите просить пользователя интерактивно вводить значения, а вызываете свой скрипт с параметрами. Смотрите call /? , как с этим справиться.

3. надежный подсчет аргументов

Ответ №1:

 @echo off
setlocal
set "part2=%2"
set "part1=%1"
if defined part1 (
 if defined part2 (
  tasklist /FI "PID ge %1" /FI "PID le %2"
 ) else (
  tasklist /FI "PID ge %1"
 )
) else ECHO Need at least one argument
pause
 

Предполагая, что вы хотите выполнить thisbatch 1234 5678 where 5678 необязательно.

Можно было бы опустить присвоения part? и заменить if defined part? на if "%?" neq "" (где ? есть 1 или 2 )

Это предполагает, что вы можете доверять своим пользователям, и они будут входить в соответствии с ожиданиями (т.е. нет thisbatch crash me ) — GIGO.

Или вы хотите запустить это полностью интерактивно?