Пакетный скрипт: сравните значение массива с числовым значением - PullRequest
0 голосов
/ 20 мая 2018

Общая цель состоит в том, чтобы я хотел написать пакетный скрипт, в который я мог бы передать два аргумента - группу AD и местоположение текстового файла, содержащего список пользователей.Затем готовые данные будут переданы в API в другой системе для импорта для управления другими группами, такими как списки рассылки и т. Д.

Сложность заключается в следующем: я хочу сравнить значение массива с числовой переменной в пакетесценарий, без использования отложенного расширения, предпочтительно.

Это позволит мне создать «сравнение пузырей», где я могу проверить каждую новую запись по значениям, уже существующим в файле, и затем либо добавить запись в основной списокили ничего не делать с ним, если он уже существует.

Я пытаюсь сделать это без использования отложенного расширения.Мне пришло в голову, что, возможно, массивы не могут быть использованы таким образом, без задержки расширения.Можно ли сравнивать увеличивающиеся значения массива без использования отложенного расширения?

FOR /L %%a IN (0,1,9) DO (
CALL SET numbers[%%a%%]=%%a
)
SET /A i=0
:startLoop
IF "%numbers[%i%]%" EQU "%i%" DO (
ECHO "%i% exists!"
set /A i=%i%+1
GOTO startLoop
)
ELSE ( ECHO "The list has finished at %i%")

1 Ответ

0 голосов
/ 20 мая 2018

В вашем коде есть некоторые проблемы:

  • call set numbers[%%a%%]=%%a должен читаться как set "numbers[%%a]=%%a" (здесь не нужно call);
  • нет do вif пункты;
  • if "%numbers[%i%]%" equ "%i%" пытается раскрыть (несуществующие) переменные numbers[ и ];call if "%%numbers[%i%]%%" equ "%i%" не работает, так как call нельзя использовать с if;но вы могли бы сделать call set "interim=%%numbers[%i%]%%", а затем if "%interim%" equ "%i%";
  • set /A i=%i%+1 должен читать set /A "i+=1";
  • ) else ( должен быть в одной строке;

В целом это означает:

for /L %%a in (0,1,9) do (
    set "numbers[%%a]=%%a"
)
set /A "i=0"
:startLoop
call set "interim=%%numbers[%i%]%%"
if "%interim%" equ "%i%" (
    echo %i% exists
    set /A "i+=1"
    goto :startLoop
) else (
    echo The list has finished at %i%
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...