2012-02-26 15 views
6

Próbuję utworzyć skrypt wsadowy, który wykonałby tę samą akcję dla każdego podanego parametru. Na przykład, dając plików X jako parametry:
script.bat "file1.txt" "file2.txt" "file3.txt" "file4.txt" ... "fileX.txt"
będzie ich nazwy:
"file1.bin" "file2.bin" "file3.bin" "file4.bin" ... "fileX.bin"
Zmień to tylko przykład, będzie trzeba go do bardziej skomplikowanych operacji zbyt.
Przypuszczam, że powinno to być coś w rodzaju for each, ale jestem nowy w skryptach wsadowych.Przetwarzanie wsadowe każdego parametru

Zastanawiam się tylko, czy mogę po prostu zwiększyć %1 indeks ...

Odpowiedz

8

Można użyć SHIFT do zmiany parametrów w lewo. Innymi słowy przesunięcie nazywając położy drugi parametr% 1, trzeci do% 2 itd

Więc trzeba coś takiego:

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

To po prostu wydrukować argumenty w porządku, ale można rób, co chcesz w pętli.

1

To, co otrzymałem, było następujące. I mają tendencję do nadmiernego robić rzeczy, że chciałbym podzielić się ...

Na szczycie mojego pliku wsadowego Mam następujący kod ...

Zastosowanie:

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

Następnie na dno (gdzie zazwyczaj umieścić wszystkie swoje funkcje) ...

Funkcja:

::-------------------------------------------------------- 
:: 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 
) 

Aby skorzystać z tej prostej. Po prostu wywołujesz funkcję przechodzącą w zmiennej, którą chcesz zmienić LUB utworzyć, a następnie przekaż przełącznik, którego szukasz, i ostatnie przekaż wszystkie parametry ze skryptu.

2

można zrobić coś takiego i po prostu dodać złożoność chcesz:

for %%x in (%*) do (
    echo %%x 
) 
Powiązane problemy