DOS: Übergabeparameter %1, %2 usw.

Wessy

Erfahrenes Mitglied
Hallo alle beisammen,

ich habe hier ein total nerviges Problem. Ich möchte für einige Anwender in unserem Netzwerk ein spezielles Login-Script bereitstellen. Dieses soll manuell oder automatisch einen Standarddrucker setzen. Alles funktioniert soweit doch ich komme mit dem automatischen Start/Ablauf der Batchdatei nicht vorran. Ich möchte quasi als Übergabeparameter entweder "/? /d: Druckername /a: Aktion" angeben können. Da Drucker sehr häufig z.B. HP LJ 1320n genannt werden, muss ich dann die Übergabeparameter in Anführungsstriche packen. Hier kommt das Problem: Wie bekomme ich die Anführungsstriche später wieder aus dem Übergabeparameter raus?

Z.B übergibt mir der Aufruf test.bat /d:"HP LJ 1320n" dann nicht /d:HP LJ 1320n an %1 sondern /d:"HP LJ 1320n". Nun könnte ich (mache ich auch schon) die Variablen mit %variable:~1,2% entsprechend zurechtschneiden um die überflüssigen Teile vorn und hinten abzuschneiden. Aber der Benutzer kann ja den Aufruf auch ohne die Anführungszeichen starten. Mit dem IF-Befehl kann ich aber nicht abfragen oder ein " mit angegeben wurde da " als Steuerzeichen interpretiert wird. Was also nun?

Ich hoffe auf ein paar Tips oder Gedankenanstöße...

Mein Code der Batch:
PHP:
ECHO OFF
CLS
SET Hilfe=nein
SET Drucker=(leer)
SET Aktion=(leer)
ECHO Argument 1:%1
ECHO Argument 2:%2
ECHO Argument 3:%3

SET Comefrom=scanne-nach-argumenten-1
IF NOT "%1"=="" SET temp=%1
GOTO scanne-nach-argumenten
:scanne-nach-argumenten-1

SET Comefrom=scanne-nach-argumenten-2
IF NOT "%2"=="" SET temp=%2
GOTO scanne-nach-argumenten
:scanne-nach-argumenten-2

SET Comefrom=scanne-nach-argumenten-3
IF NOT "%3"=="" SET temp=%3
GOTO scanne-nach-argumenten
:scanne-nach-argumenten-3



GOTO skip-scanne-nach-argumenten
:scanne-nach-argumenten
IF "%temp:~1,1%"=="?" SET Hilfe=Ja
IF "%temp:~0,2%"=="/d" SET Drucker=%temp:~3%
IF "%temp:~0,2%"=="/a" SET Aktion=%temp:~3%
GOTO %Comefrom%
:skip-scanne-nach-argumenten

ECHO Hilfe: %Hilfe%
ECHO Drucker: %Drucker%
ECHO Aktion: %Aktion%
 
Zuletzt bearbeitet:
D

Doc Ead

versuch es mal mit dem hier :)

SET Drucker=/d:"DruckerXYZ"
SET Drucker=%Drucker:"=%
ECHO %Drucker%

Sollte alle vorkommenden " einfach duch ein '' = kein Zeichen erstezen also löschen egal was an welcher Stelle eingegeben wurde.

Info:
SET xy=%xy:[suchzeichen]=[ersetzzeichen]%
SET Drucker=%Drucker:"=#%
ECHO %Drucker%
 

Wessy

Erfahrenes Mitglied
Ha, ich glaubs nicht. -=> 1 <=- Jahr nachdem ich das Thema geöffnet hab gibt's die lang ersehnte Antwort! Unfassbar. Damit hätte ich nicht mehr gerechnet. Aber du hast recht. Funktioniert genau so wie ich's brauchte. Hab das damals irgendwie meega aufwändig und mit na Schleife gelöst. Die ist dann jedes Zeichen durchlaufen und hat das " mit nem ^ oder so entwertet. :)

Einfach genial. Vielen Dank für dein Post!