Пакетный анализ каждого параметра - PullRequest
7 голосов
/ 27 февраля 2012

Я пытаюсь создать пакетный скрипт, который будет выполнять одно и то же действие для каждого заданного параметра.Например, если для X-файлов заданы параметры:
script.bat "file1.txt" "file2.txt" "file3.txt" "file4.txt" ... "fileX.txt"
, они будут переименованы в:
"file1.bin" "file2.bin" "file3.bin" "file4.bin" ... "fileX.bin"
Переименовать - это просто пример, он мне понадобится и для более сложных операций.
Я думаю, это должно быть что-то вроде for each, но я новичок в пакетных скриптах.

Мне просто интересно, могу ли я просто увеличить %1 index ...

Ответы [ 3 ]

10 голосов
/ 27 февраля 2012

Вы можете использовать SHIFT для сдвига параметров влево.Другими словами, при вызове shift для второго параметра будет задан% 1, для третьего -% 2 и т. Д.

Так что вам нужно что-то вроде:

@ECHO OFF
:Loop
IF "%1"=="" GOTO Continue
   ECHO %1
SHIFT
GOTO Loop
:Continue

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

4 голосов
/ 07 мая 2015

Вы можете сделать что-то вроде этого и просто добавить желаемую сложность:

for %%x in (%*) do (
  echo %%x
)
1 голос
/ 15 января 2015

В итоге я получил следующее. Я склонен слишком много делать, думал, что поделюсь ...

Вверху моего командного файла у меня есть следующий код ...

Использование:

::--------------------------------------------------------
:: Handle parameters
::--------------------------------------------------------
CALL:ChkSwitch bOverwrite "/OVERWRITE" %*
CALL:ChkSwitch bMerge "/MERGED" %*

Затем внизу (где я обычно размещаю все свои функции) ...

Функция:

::--------------------------------------------------------
:: ChkSwitch Function
::--------------------------------------------------------

:ChkSwitch <bRet> <sSwitch> <sParams> (
    SETLOCAL EnableDelayedExpansion
    SET "switched=0"

    :ChkSwitchLoop
    IF "%~3"=="" GOTO ChkSwitchDone

    IF %~3==%~2 (
        SET "switched=1"
        GOTO ChkSwitchDone
    )

    SHIFT /3
    GOTO ChkSwitchLoop

    :ChkSwitchDone
)
( 
    ENDLOCAL
    SET "%~1=%switched%"
    EXIT /B
)

Чтобы использовать это просто. Вы просто вызываете функцию, передающую переменную, которую хотите изменить, ИЛИ создаете, а затем передаете нужный вам переключатель и в последний раз передаете все параметры из скрипта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...