Много информации, приведенной выше, привело меня к дальнейшим исследованиям и, в конечном итоге, к моему ответу, поэтому я хотел поделиться тем, что я делал, в надежде, что это поможет кому-то еще:
Я также хотел передать переменное количество переменных в пакетный файл, чтобы их можно было обработать в этом файле.
Я согласился передать их в командный файл, используя кавычки
Я бы хотел, чтобы они обрабатывались аналогично приведенному ниже, но с использованием цикла вместо записи вручную:
Итак, я хотел выполнить это:
prog_ZipDeleteFiles.bat "_appPath=C:\Services\Logs\PCAP" "_appFile=PCAP*.?"
И используя магию циклов for, сделайте это в командном файле:
set "_appPath=C:\Services\Logs\PCAP"
set "_appFile=PCAP*.?"
Проблема была в том, что все мои попытки использовать цикл for не работали. Пример ниже:
for /f "tokens* delims= " in %%A (%*) DO (
set %%A
)
просто сделает:
set "_appPath=C:\Services\Logs\PCAP"
а не:
set "_appPath=C:\Services\Logs\PCAP"
set "_appFile=PCAP*.?"
даже после настройки
SETLOCAL EnableDelayedExpansion
Причина была в том, что цикл for прочитал всю строку и назначил мой второй параметр %% B во время первой итерации цикла. Поскольку% * представляет все аргументы, обрабатывается только одна строка - поэтому происходит только один проход цикла for. Это по замыслу оказывается, и моя логика была неверной.
Поэтому я перестал пытаться использовать цикл for и упростил то, что пытался сделать, используя операторы if, shift и goto. Согласен, это немного взломать, но это больше подходит для моих нужд. Я могу перебрать все аргументы, а затем использовать оператор if, чтобы выйти из цикла, когда обработаю их все.
Заявление о победе за то, что я пытался выполнить:
echo on
:processArguments
:: Process all arguments in the order received
if defined %1 then (
set %1
shift
goto:processArguments
) ELSE (
echo off
)
ОБНОВЛЕНИЕ - вместо этого мне пришлось изменить приведенное ниже, я выставлял все переменные среды, пытаясь сослаться на% 1 и используя shift таким образом:
echo on
shift
:processArguments
:: Process all arguments in the order received
if defined %0 then (
set %0
shift
goto:processArguments
) ELSE (
echo off
)