andimue
Goto Top

Substring aus Parameter bzw. aus for-Variable

Hallo an alle,

ich hab mal eine mehr oder weniger akademische Frage zum Windows Batch-Scripting:

Mittels set-Kommando kann man ja aus eine Variablen einen Teilstring extrahieren:

set "var=123456789"  
set "var_teil=%var:~0,3%"  

Bei einer neuen Prozedur stellte sich mir nun die Frage, ob eine solche Teilstring-Extraktion auch für Aufrufparameter ( %1 bis %9) und/oder Variablen in for-Kommandos (z.B. %%a) möglich ist ?

Beispiel:

Mit der for-Schleife mache ich ein dir-Kommando über ein Verzeichnis und will eigentlich nur die ersten 7 Stellen der gefundenen Dateien an die Unterprozedur sub1 übergeben.

@echo off

for /f  %%a in ('dir /b "c:\temp\*.txt"') do call :sub1 %%a  
...

:sub1
set "var1=%1"  
set "var1=%var1:~0,7%"   <--- momentan löse ich das Problem durch dieses 2.set-Kommando  
...


Und genau da kommt meine Frage ins Spiel:

kann ich entweder den "call :sub1 %%a" so abändern, dass nur 7 Stellen übergeben werden (also was in der Art "call :sub1 %%a:~0,7")
bzw.
kann ich in der gerufenen Unterprozedur sub1 bei der Zuweisung von var1 was machen in der Art set="var1=%1:~0,7" ?

Wie gesagt, mit einem 2.set-Kommando kann ich das "Problem" natürlich lösen aber ich wollte von den Spezialisten hier mal wissen, ob es vielleicht einen (undokumentierten) Befehl dafür gibt.

Vielen Dank und freundliche Grüße

Content-Key: 241577

Url: https://administrator.de/contentid/241577

Printed on: April 25, 2024 at 10:04 o'clock

Member: bastla
bastla Jun 23, 2014 at 19:23:00 (UTC)
Goto Top
Hallo andimue!

Da die Spezialisten vermutlich anderweitig beschäftigt sind, kurze Antwort von mir: Nein, kannst Du nicht ...

... es sei denn, es befände sich nach dem 7. Zeichen ein passendes Trennzeichen, das demnach als Delimiter zu verwenden wäre.

Grüße
bastla
Member: andimue
andimue Jun 24, 2014 at 05:42:23 (UTC)
Goto Top
Hallo bastla,

"Da die Spezialisten vermutlich anderweitig beschäftigt sind, kurze Antwort von mir" <-- schreibt einer der größten Spezialisten überhaupt LOL face-smile

Aber in der Tat gibt es nach dem 7.Zeichen einen Underscore als Trennzeichen - Sorry, hab ich vergessen zu erwähnen.
Was schwebt dir denn als Lösung vor ?

Grüße
Andi
Member: bastla
Solution bastla Jun 24, 2014 updated at 10:19:23 (UTC)
Goto Top
Hallo andimue!

Dann sollte
for /f "delims=_" %%a in ('dir /b "c:\temp\*.txt"') do call :sub1 %%a
genügen ...

Grüße
bastla
Member: andimue
andimue Jun 24, 2014 at 10:19:03 (UTC)
Goto Top
Danke schön face-smile