CMD-Batch - Problem mit Sonderzeichen beim Auslesen eines Textes in eine Variable
Hallo allerseits,
nachdem ich hier im Forum schon "lesenderweise" viel Hilfe erfahren habe, möchte ich mich heute "schreibenderweise" an Euch wenden.
Hier mein Problem:
Umgebung:
Windows XP, Sp3, keine dritten Programme.
Ich sammle zur Zeit mit den Befehlen "dsquery" und dsget" Informationen über Nutzerkonten.
Dabei sollen die Informationen in Variable gelenkt werden um sie weiter verwenden zu können.
Eine Information ist die Beschreibung eines Nutzerkontos. Durch eine Abfrage die ich in eine Textdatei umlenke bekomme ich folgende Ausgabe:
--desc------------------------------------------
--Mitarbeiter Systems & Application Management--
dsget succeeded
Erklärung:
In der ersten Zeile steht der Parameter der Abfrage (desc=Description)
In der zweiten Zeile stehe die eigentliche Information.
In der dritten Zeile steht die Erfolgsmeldung des Befehls.
ACHTUNG: Die Striche (-) sind kein Inhalt der Ausgabe. Sie sollen hier für die "unsichtbaren" Leerzeichen stehen.
Um die Textdatei auszulesen habe ich mich einer Batch (von Biber) aus dem Forum bedient:
Erklärung:
1.) Nutzerkennung eingeben.
2.) Abfrage nach der Beschreibung des Nutzerkontos.
3.) Zeilenweises Auslesen der Textdatei (Inhalt siehe oben) in eine Variable mit dem "!" als Delimiter.
4.) Auslesen dieser Variable des zweiten Tokens in eine neue Variable.
Diese Abfrage funktioniert im Normalfall auch wunderbar.
Hier das Problem:
Das "&".
Wenn im auszulesenden Text ein "&" vorkommt greift der Call-Befehl aus der ersten For-Schleife ins Leere weil es als Kommando interpretiert wird.
Ich habe schon versucht die Variablen in Anführungszeichen zu stellen, aber dann bekomme ich die ganzen Leerzeichen mit, und die kann ich nicht gebrauchen.
Ziel soll sein das der Text
Mitarbeiter Systems & Application Management
ohne Leer- oder Anführungszeichen in einer Variablen steht.
Habt ihr dafür vielleicht einen Vorschlag?
Bitte bleibt bei der DOS-Shell.
Ich weiß das es in anderen Programmiersprachen einfachere Lösungen gibt, aber mich reizt das Problem.
Vielen Dank für eure Unterstützung.
Gruß,
Destry
[Edit Biber] Als formatiert. Und wenigstens im Titel den "DOS-Batch" umbenannt in "CMD-Batch". [/Edit]
nachdem ich hier im Forum schon "lesenderweise" viel Hilfe erfahren habe, möchte ich mich heute "schreibenderweise" an Euch wenden.
Hier mein Problem:
Umgebung:
Windows XP, Sp3, keine dritten Programme.
Ich sammle zur Zeit mit den Befehlen "dsquery" und dsget" Informationen über Nutzerkonten.
Dabei sollen die Informationen in Variable gelenkt werden um sie weiter verwenden zu können.
Eine Information ist die Beschreibung eines Nutzerkontos. Durch eine Abfrage die ich in eine Textdatei umlenke bekomme ich folgende Ausgabe:
--desc------------------------------------------
--Mitarbeiter Systems & Application Management--
dsget succeeded
Erklärung:
In der ersten Zeile steht der Parameter der Abfrage (desc=Description)
In der zweiten Zeile stehe die eigentliche Information.
In der dritten Zeile steht die Erfolgsmeldung des Befehls.
ACHTUNG: Die Striche (-) sind kein Inhalt der Ausgabe. Sie sollen hier für die "unsichtbaren" Leerzeichen stehen.
Um die Textdatei auszulesen habe ich mich einer Batch (von Biber) aus dem Forum bedient:
::----- Schnipp -----
@echo off
echo Kennung eingeben:
set /P TPL_SAMID=
dsquery user -samid %TPL_SAMID% | dsget user -desc > %TPL_SAMID%_Description_Query_01.txt
for /f "delims=" %%i in (%TPL_SAMID%_Description_Query_01.txt) do call :SET_NEW_QUERY_DESC_VAR %%i
goto :GO_ON_QUERY_DESC
:SET_NEW_QUERY_DESC_VAR
set NEW_QUERY_DESC_VAR=%NEW_QUERY_DESC_VAR%!%*
goto :EOF
:GO_ON_QUERY_DESC
for /f "tokens=1,2 delims=!" %%i in ("%NEW_QUERY_DESC_VAR%") do @set NEW_DESCRIPTION=%%j
echo "%NEW_DESCRIPTION%"
::----- Schnapp -----
1.) Nutzerkennung eingeben.
2.) Abfrage nach der Beschreibung des Nutzerkontos.
3.) Zeilenweises Auslesen der Textdatei (Inhalt siehe oben) in eine Variable mit dem "!" als Delimiter.
4.) Auslesen dieser Variable des zweiten Tokens in eine neue Variable.
Diese Abfrage funktioniert im Normalfall auch wunderbar.
Hier das Problem:
Das "&".
Wenn im auszulesenden Text ein "&" vorkommt greift der Call-Befehl aus der ersten For-Schleife ins Leere weil es als Kommando interpretiert wird.
Ich habe schon versucht die Variablen in Anführungszeichen zu stellen, aber dann bekomme ich die ganzen Leerzeichen mit, und die kann ich nicht gebrauchen.
Ziel soll sein das der Text
Mitarbeiter Systems & Application Management
ohne Leer- oder Anführungszeichen in einer Variablen steht.
Habt ihr dafür vielleicht einen Vorschlag?
Bitte bleibt bei der DOS-Shell.
Ich weiß das es in anderen Programmiersprachen einfachere Lösungen gibt, aber mich reizt das Problem.
Vielen Dank für eure Unterstützung.
Gruß,
Destry
[Edit Biber] Als formatiert. Und wenigstens im Titel den "DOS-Batch" umbenannt in "CMD-Batch". [/Edit]
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 84409
Url: https://administrator.de/contentid/84409
Ausgedruckt am: 22.11.2024 um 18:11 Uhr
5 Kommentare
Neuester Kommentar
Hallo Destry und willkommen als schreibender Teilnehmer!
Vielleicht (allerdings gänzlich ungetestet) so:
Grüße
bastla
Vielleicht (allerdings gänzlich ungetestet) so:
@echo off
echo Kennung eingeben:
set /P TPL_SAMID=
dsquery user -samid %TPL_SAMID% | dsget user -desc > %TPL_SAMID%_Description_Query_01.txt
for /f "delims=" %%i in (%TPL_SAMID%_Description_Query_01.txt) do call :SET_NEW_QUERY_DESC_VAR "%%i"
goto :GO_ON_QUERY_DESC
:SET_NEW_QUERY_DESC_VAR
set "NEW_QUERY_DESC_VAR=%NEW_QUERY_DESC_VAR%!%~*"
goto :EOF
:GO_ON_QUERY_DESC
for /f "tokens=1,2 delims=!" %%i in ("%NEW_QUERY_DESC_VAR%") do @set NEW_DESCRIPTION=%%j
echo "%NEW_DESCRIPTION%"
Grüße
bastla
Hallo Destry!
Na gut, dann neuer Versuch:
Grüße
bastla
Na gut, dann neuer Versuch:
@echo off & setlocal
echo Kennung eingeben:
set /P TPL_SAMID=
dsquery user -samid %TPL_SAMID% | dsget user -desc > %TPL_SAMID%_Description_Query_01.txt
for /f "delims=" %%i in (%TPL_SAMID%_Description_Query_01.txt) do call :SET_NEW_QUERY_DESC_VAR "%%i"
goto :GO_ON_QUERY_DESC
:SET_NEW_QUERY_DESC_VAR
set "NEW_QUERY_DESC_VAR=%NEW_QUERY_DESC_VAR%!%~1"
goto :EOF
:GO_ON_QUERY_DESC
for /f "tokens=1,2 delims=!" %%i in ("%NEW_QUERY_DESC_VAR%") do @set NEW_DESCRIPTION=%%j
:Loop1
if "%NEW_DESCRIPTION:~0,1%" neq " " goto :Loop2
set "NEW_DESCRIPTION=%NEW_DESCRIPTION:~1%"
goto :Loop1
:Loop2
if "%NEW_DESCRIPTION:~-1%" neq " " goto :Done
set "NEW_DESCRIPTION=%NEW_DESCRIPTION:~0,-1%"
goto :Loop2
:Done
echo "%NEW_DESCRIPTION%"
Grüße
bastla