2016-05-05 5 views
1

Ich bin sehr neu in Cmd Batch-Dateien. Ich habe Code:Wie wird der erste Parameter einer Windows-Stapeldatei in einer IF-Bedingung referenziert?

@echo off 
if {%1} =="1" (
    goto 1cmd 
) 
if {%1} =="2" (
    goto 2cmd 
) 
if {%1} =="3" (
    goto 3cmd 
) 
if {%1} =="" (
    echo qwerty 
) 

:1cmd 
call D:\test\1\1.cmd 
goto end 

:2cmd 
call D:\test\2\2.cmd 
goto end 

:3cmd 
call D:\test\3\3.cmd 
goto end 

:end 

Datei heißt a.bat. Egal, welchen Parameter ich eintippe, a.bat ruft immer 1.cmd an.

Was ist der Grund?

+0

Sie müssen '{2}' eingeben, um Option 2 zu wählen. Sie wählen dies. –

+0

Sie müssen '{% 1}' in '"% ~ 1 "' ändern. Dann müssen Sie den Fall berücksichtigen, wenn jemand "4" eingibt ... – aschipfl

+0

Mögliches Duplikat von [Wie übergebe ich Befehlszeilenparameter an eine Batchdatei?] (Http://stackoverflow.com/questions/26551/how-to- pass-command-line-parameters-to-a-batch-Datei) – Mofi

Antwort

1

Funktioniert das?

@ECHO OFF 


     if "%~1" =="1" (
     goto 1cmd 
     ) 
     if "%~1" =="2" (
     goto 2cmd 
     ) 
     if "%~1" =="3" (
     goto 3cmd 
     ) 
    if {%1} =="" (
    echo qwerty 
    ) 
    exit /b 0 


     :1cmd 
     call D:\test\1\1.cmd  
     goto end 

     :2cmd 
     call D:\test\2\2.cmd  
     goto end 
     :3cmd 
     call D:\test\3\3.cmd 
goto end 
+0

Ja ist es. Können Sie mir erklären, warum "% 1" oder {% 1} nicht funktioniert haben? Ich basierte auf anderen Skript aus der äußeren Anwendung, und in diesem Skript hat alles funktioniert. Mayby einige fehlende Direktiven? –

+0

@ MichałM 'wenn etwas == etwas vergleicht die Zeichenketten direkt. Wenn einige der Argumente Leerzeichen enthalten, benötigen Sie Anführungszeichen, aber auch Anführungszeichen werden ausgewertet. Das '% ~ 1' wird als erstes Argument dekotiert und wird hier zur Robustheit verwendet. – npocmaka

+0

Verstanden. Und noch eins - exit/b 0 <-? –

Verwandte Themen