2012-02-26 23 views
6

parametresine ayırın Her bir parametre için aynı eylemi gerçekleştirecek bir toplu komut dosyası oluşturmaya çalışıyorum. Örneğin, parametre olarak X dosyalarını vererek:
script.bat "file1.txt" "file2.txt" "file3.txt" "file4.txt" ... "fileX.txt"
onları yeniden adlandırır:
"file1.bin" "file2.bin" "file3.bin" "file4.bin" ... "fileX.bin"
yeniden adlandır sadece bir örnektir, ben de daha karmaşık işlemler için ihtiyacınız olacak.
for each gibi bir şey olmalı, ancak toplu komut dosyalarında yeniyim.Her parametreyi

Sadece %1 endeksi artırır misin diye merak ediyorum ...

cevap

8

Sen sol parametreleri kaydırmaya SHIFT kullanabilirsiniz. Başka bir deyişle çağıran vardiya

Böylece gibi bir şey gerekiyor% 2 vb,% 1, üçüncü ikinci parametreyi koyacağız: Bu sadece sırayla argümanları yazdırır

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

ama sen yapabilirsin Döngü içinde ne istersen onu yap.

1

Sonunda neyle karşılaştığım şuydu. Ben üzerinden şeyler yapmak eğilimindedir, benim toplu dosyasının en üstünde ... Ben paylaşmak istiyorum

düşünce Ben şu kod ...

Kullanımı: Sonra

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

de (Ben genellikle tüm fonksiyonlarını yerleştirmek) alt ...

Fonksiyon:

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

Bunu kullanmak için basit. Sadece değiştirmek istediğiniz bir değişkenden geçen işlevi çağırırsınız, VE daha sonra geçiş yaptığınız anahtara geçmek ve son olarak tüm paramları komut dosyasından geçirirsiniz.

2

Böyle bir şey yapmak ve sadece istediğiniz karmaşıklığı ekleyebilirsiniz:

for %%x in (%*) do (
    echo %%x 
) 
İlgili konular