2017-04-09 12 views
0

Ich versuche, einfache Überprüfung der Batch-Datei zu tun. argCount enthält die richtige Nummer, aber ich habe Probleme beim Vergleich von Variablen und Zahlen. Ich möchte Hilfe anzeigen, wenn die Anzahl der Argumente nicht gleich 3 ist und an das Ende der Datei gehen.
Ich habe versucht:
if not %argCount% == 3
if not %argCount%=='3'
if not '%argCount%'=='3'
if %argCount% NEQ 3
aber keine dieser Optionen wie erwartet funktioniert ... Die meisten Optionen, die ich versuchte, zeigen mir immer Meldung helfen, unabhängig von der Anzahl der Argumente, die zum Teil Die Optionen zeigen mir eine Hilfemeldung ohne die ersten 3 Zeilen, wenn ich 3 Argumente an das Skript übergebe (extrem komisch).Überprüfen Sie die Anzahl der Argumente in der Batch-Datei

@echo off 

set argCount=0 
for %%x in (%*) do (
    set /A argCount+=1 
) 
if not %argCount% == 3 (
    echo This script requires the next parameters: 
    echo - absolute path to file 
    echo - filter (explanation) 
    echo - true or false (explanation) 
    echo Examples: 
    echo start.bat full\path\to\the\file.ext test true 
    echo start.bat full\path\to\the\file.ext nof false 
    goto end 
) 

REM some another code 

:end 
+2

Ihr Echo) '' wird als Ende des 'if' Block behandelt. Entkomme alle ')' mit einem Caret innerhalb von Klammern. Auch [verwenden Sie immer 'setlocal'] (https://stackoverflow.com/a/15659309/1683264), es sei denn, Sie haben einen ausdrücklichen Grund, dies nicht zu tun; und wenn Sie 'goto: EOF' oder' exit/b' verwenden, können Sie die Markierung ': end' am Ende Ihres Skripts loswerden. – rojo

+0

@rocknow Es ist eine sehr schlechte Idee, die Batch-Datei 'start.bat' zu benennen, da dies den integrierten Befehl __START__ des Windows-Befehlsinterpreters außer Kraft setzt. Daher wird dringend empfohlen, der Batchdatei einen anderen Namen als 'start.bat' zu geben. – Mofi

Antwort

2

Warum nicht nur die Struktur vereinfachen:

IF NOT "%~3"=="" IF "%~4"=="" GOTO START 
ECHO This script requires the next parameters: 
ECHO - absolute path to file 
ECHO - filter (explanation) 
ECHO - true or false (explanation) 
ECHO Examples: 
ECHO "%~nx0" "full\path\to\the\file.ext" test true 
ECHO "%~nx0" "full\path\to\the\file.ext" nof false 
GOTO :EOF 

:START 
+0

Gute Idee mit Ausnahme der Verwendung von "START" als Label, da __START__ auch ein integrierter Befehl des Windows-Befehlsinterpreters ist. Das Label "START" funktioniert. Wenn Sie jedoch auch den Befehl __START__ in der Batch-Datei verwenden, ist es nicht sinnvoll, diese Zeichenfolge als Label zu verwenden, da die Suche nach * start * mit der Bedeutungsetikett oder mit dem Bedeutungsbefehl schwierig wird. Besser wäre "BEGIN" als Label. – Mofi

+0

Super, es funktioniert! @Compo können Sie erklären, wie die erste Zeile funktioniert (ich meine Bedingungen, nicht der Goto)? – rocknow

+0

Wenn das dritte Argument nicht leer ist (existiert) und der vierte Parameter leer ist (nicht vorhanden), starten Sie den Hauptteil des Skripts. Jedes andere Szenario erhält die Anweisungen vor dem Beenden. _ (Übrigens, möchten Sie vielleicht ein 'TIMEOUT -1 1> NUL' kurz vor dem 'GOTO: EOF' hinzufügen, damit der Endbenutzer Zeit hat, die Nachricht zu lesen) _. – Compo

Verwandte Themen