Variableninhalt im DOS-Batch kürzen
Guten Tag!,
ich habe da beim DOS-Batch ein kleines Problem...
Das Batch bekommt eine Variable %5 durch ein anderes Programm übergeben (dort kann ich leider nicht eingreifen, das mal vorneweg);
diese Variable enthält einen Pfad, der ebenfalls inhaltlich nie gleich ist.
Jetzt wird leider ein " vor und hinter der Pfadangabe mitgeliefert, sodass ich diesen nicht für weitere Funktionen nutzen kann.
Ich versuche, beherrsche aber einfach nicht den set-Befehl von DOS, um die Variable in eine ohne "..." umzubasteln. Aber - es klappt einfach nicht!
Das Anführungszeichen steht immer am Anfang und Ende der Variablen; der Inhalt ist nicht identisch und hat leider auch eine unterschiedliche Länge.
Könnte mir jemand nen Tipp geben?
Vielen Dank!
ich habe da beim DOS-Batch ein kleines Problem...
Das Batch bekommt eine Variable %5 durch ein anderes Programm übergeben (dort kann ich leider nicht eingreifen, das mal vorneweg);
diese Variable enthält einen Pfad, der ebenfalls inhaltlich nie gleich ist.
Jetzt wird leider ein " vor und hinter der Pfadangabe mitgeliefert, sodass ich diesen nicht für weitere Funktionen nutzen kann.
Ich versuche, beherrsche aber einfach nicht den set-Befehl von DOS, um die Variable in eine ohne "..." umzubasteln. Aber - es klappt einfach nicht!
Das Anführungszeichen steht immer am Anfang und Ende der Variablen; der Inhalt ist nicht identisch und hat leider auch eine unterschiedliche Länge.
Könnte mir jemand nen Tipp geben?
Vielen Dank!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 37315
Url: https://administrator.de/contentid/37315
Ausgedruckt am: 25.11.2024 um 20:11 Uhr
10 Kommentare
Neuester Kommentar
Moin Fusseler,
falls es ein Batch diesseits von Win95/98/ME ist:
Demo:
HTH
Biber
falls es ein Batch diesseits von Win95/98/ME ist:
::----snipp HandleInputParmsDemo.bat
@Echo InParams [1:[%1] [2:[%2]] [3:[%3]
@Echo Behandelte InParams: [1:[[%~1] [2:[%~2]] [3:[%~3]
::----snapp HandleInputParmsDemo.bat
(=11:05:32 D:\temp=)
>HandleInputParmsDemo.bat eins zwei "%userprofile%"
InParams [1:[eins] [2:[zwei]] [3:["C:\Dokumente und Einstellungen\Biber"]
Behandelte InParams: [1:[[eins] [2:[zwei]] [3:[C:\Dokumente und Einstellungen\Biber]
(=11:05:46 D:\temp=)
HTH
Biber
Also, Fusseler,
kurz kommentiert:
1)
bitte angewöhnen: DOS-Prompt, DOS-Variablen, DOS-Batch gibt es noch bis inclusive Win95/98/ME. Da hieß den Command-Interpreter noch COMMAND.com wie auch vorher ab DOS 2.0.
Seit Win NT; spätestens aber seit Win2000 gibt es alternativ und als Default die CMD.exe als "Eingabeaufforderung" oder oder "Kommandozeile" oder Shell.
Entsprechend dann die CMD-Variablen etc.
2) Für die CMD.exe sind die Funktionalitäten massiv erweitert worden- und M$ hat öffentlich bekundet, dass wohl doch nicht alles über Klicki-Bunti-GUI abzufackeln ist, speziell beim administrativen Tagesgeschäft.
Bei diesem Vista-Geraffel soll das Ganze mit der Monad-Shell noch einmal einen qualitativen Quantensprung erleben.
[Wenn denn Vista jemals kommt.... *lach*]
3) Was CMD-Variablen angeht, gibt es z.B. bei Eingabe von "SET /?" oder "FOR /?"oder "CMD /?" oder "CALL /?" am CMD-Prompt eine ellenlange und gute (=nicht von M$-Übersetzungsprogrammen generierte) Hilfe.
In den letzten 30 Zeilen der FOR/?-Hilfe steht zum Beispiel:
Ähnliches steht bei CALL /? bezogen auf die Parameter %1....%9
Diese Syntax habe ich oben angewendet.
Thats all.
Gruß
Biber
kurz kommentiert:
1)
bitte angewöhnen: DOS-Prompt, DOS-Variablen, DOS-Batch gibt es noch bis inclusive Win95/98/ME. Da hieß den Command-Interpreter noch COMMAND.com wie auch vorher ab DOS 2.0.
Seit Win NT; spätestens aber seit Win2000 gibt es alternativ und als Default die CMD.exe als "Eingabeaufforderung" oder oder "Kommandozeile" oder Shell.
Entsprechend dann die CMD-Variablen etc.
2) Für die CMD.exe sind die Funktionalitäten massiv erweitert worden- und M$ hat öffentlich bekundet, dass wohl doch nicht alles über Klicki-Bunti-GUI abzufackeln ist, speziell beim administrativen Tagesgeschäft.
Bei diesem Vista-Geraffel soll das Ganze mit der Monad-Shell noch einmal einen qualitativen Quantensprung erleben.
[Wenn denn Vista jemals kommt.... *lach*]
3) Was CMD-Variablen angeht, gibt es z.B. bei Eingabe von "SET /?" oder "FOR /?"oder "CMD /?" oder "CALL /?" am CMD-Prompt eine ellenlange und gute (=nicht von M$-Übersetzungsprogrammen generierte) Hilfe.
In den letzten 30 Zeilen der FOR/?-Hilfe steht zum Beispiel:
Zusätzlich wurde die Ersetzung von Verweisen auf FOR-Variablen erweitert.
Sie können jetzt folgende Syntax verwenden:
%~I - Expandiert %I und entfernt alle umschließenden
Anführungszeichen (").
....
Diese Syntax habe ich oben angewendet.
Thats all.
Gruß
Biber
Moin Fusseler,
Ich empfehle immer:
Ich gehe mal bei Dir von einer Variablen in Anführungszeichen aus: [set j="c:\temp\datei.txt" ]
Diese Klausel gibt es nicht bei einer "reinen" FOR..IN..DO-Anweisung, weil ja bei einen "reinen" FOR..IN..DO..-Anweisung immer eine Aufzählung in der Klammer steht.
In Deinem Fall besteht zwar diese Aufzählung nur aus einem Element ("C:\temp\datei.txt").
Bleibt aber trotzdem eine Aufzählung, für die keine "tokens" oder "Delims" angegeben werden können.
Gruss
Biber
set "j="c:\temp\datei.txt""
hier oben reicht lt. M$-Hilfe auch einset j=c:\temp\datei.txt
...was ich immer vermeide, weil sich da möglicherweise ein trailing blank einschleicht.Ich empfehle immer:
set "j=c:\temp\datei.txt" -->wenn die Variable NICHT in Anführungszeichen sein soll
set j="c:\temp\datei.txt" --> wenn die Variable in Anführungszeichen sein soll
set j="c:\temp\datei.txt" --> wenn die Variable in Anführungszeichen sein soll
Ich gehe mal bei Dir von einer Variablen in Anführungszeichen aus: [set j="c:\temp\datei.txt" ]
for "tokens=" %%i in (%~j%) do set "lfdnr=%%i"
Hier ist "nur" die Klausel "tokens=" der Fehler.Diese Klausel gibt es nicht bei einer "reinen" FOR..IN..DO-Anweisung, weil ja bei einen "reinen" FOR..IN..DO..-Anweisung immer eine Aufzählung in der Klammer steht.
In Deinem Fall besteht zwar diese Aufzählung nur aus einem Element ("C:\temp\datei.txt").
Bleibt aber trotzdem eine Aufzählung, für die keine "tokens" oder "Delims" angegeben werden können.
Gruss
Biber
Nein, nein, Fusseler...
(leider bin ich kein guter Erklärer, sorry):
Beispiel am Prompt:
Bei einer Variablen %j%, %test% oder %userprofile% kannst Du diese Tilde-Syntax nicht verwenden.
Nur bei dynamischen Variablen, d.h. Zählvariablen einer FOR..IN..DO-Anweisung oder den Inputparametern eines Batches/eines geCALLten Blocks.
Siehe oben - eine Tilde auf die "echte", gesetzte Variable %j% ist wirkungslos.
Eine Tilde bei der Zählvariablen %i funktioniert.
Das Beispiel von oben als Batch mit zwei Prozentzeichen vor den Zählvariablen:
Besser?
Biber
(leider bin ich kein guter Erklärer, sorry):
Beispiel am Prompt:
>for %i in (%j%) do @echo [unbehandelt:] %i ...ohne Anführungszeichen: [%~i]
[unbehandelt:] "c:\test\datei.xyz" ...ohne Anführungszeichen: [c:\test\datei.xyz]
Bei einer Variablen %j%, %test% oder %userprofile% kannst Du diese Tilde-Syntax nicht verwenden.
Nur bei dynamischen Variablen, d.h. Zählvariablen einer FOR..IN..DO-Anweisung oder den Inputparametern eines Batches/eines geCALLten Blocks.
Siehe oben - eine Tilde auf die "echte", gesetzte Variable %j% ist wirkungslos.
Eine Tilde bei der Zählvariablen %i funktioniert.
Das Beispiel von oben als Batch mit zwei Prozentzeichen vor den Zählvariablen:
>for %%i in (%j%) do @echo [unbehandelt:] %%i ...ohne Anführungszeichen: [%%~i]
[unbehandelt:] "c:\test\datei.xyz" ...ohne Anführungszeichen: [c:\test\datei.xyz]
Besser?
Biber