Batch - Die ersten 3 Zeichen einer bestimmten Variablen oder einer TXT Datei auslesen
Hallo liebe Admins und Programmierer sowie alle anderen Wissenden
Ich bin ziemlich neu hier und habe ein Problem.
Ich brauche ein script, mit dem ich die ersten 3 Zeichen aus einer Variablen auslesen und in eine neue Variable schreiben kann.
Beispiel:
FOR /F "eol=;" %%i in ('find "07=" SConfig.ini') do set Quelle=%%i auslesen.
%Quelle% beinhaltet dann D:\inetpub\vhosts\xyz.de\subdomains\ort\httpdocs\
Ich benötige aber in der weiterführenden Verarbeitung das angegebene Laufwerk ohne Pfad also nur D:\
Wie lese ich diese 3 Zeichen aus und schreibe sie in die neue Variable %Drive% ?
Schonmal vielen Dank für eure Mühe!!
LG CCED
Ich bin ziemlich neu hier und habe ein Problem.
Ich brauche ein script, mit dem ich die ersten 3 Zeichen aus einer Variablen auslesen und in eine neue Variable schreiben kann.
Beispiel:
FOR /F "eol=;" %%i in ('find "07=" SConfig.ini') do set Quelle=%%i auslesen.
%Quelle% beinhaltet dann D:\inetpub\vhosts\xyz.de\subdomains\ort\httpdocs\
Ich benötige aber in der weiterführenden Verarbeitung das angegebene Laufwerk ohne Pfad also nur D:\
Wie lese ich diese 3 Zeichen aus und schreibe sie in die neue Variable %Drive% ?
Schonmal vielen Dank für eure Mühe!!
LG CCED
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 99675
Url: https://administrator.de/contentid/99675
Ausgedruckt am: 26.11.2024 um 12:11 Uhr
14 Kommentare
Neuester Kommentar
Hallo cced-de und willkommen im Forum!
Du kannst zwar die ersten 3 Zeichen einer Variablen mit
einer neuen Variablen zuweisen, was Du aber vorhast solltest Du besser so lösen:
Näheres dazu: "for /?" (ziemlich am Ende des, zugegeben, nicht ganz kurzen Textes)
Wenn Du tatsächlich auch den "\" dabei haben willst (ich bevorzuge es, Anführungszeichen und "\" nach Bedarf zu setzen und daher grundsätzlich nicht in Variable aufzunehmen), dann eben:
Grüße
bastla
Du kannst zwar die ersten 3 Zeichen einer Variablen mit
set "Drive=%Quelle:~,3%"
FOR /F "eol=; delims=" %%i in ('find "07=" SConfig.ini') do "set Drive=%%~di"
Wenn Du tatsächlich auch den "\" dabei haben willst (ich bevorzuge es, Anführungszeichen und "\" nach Bedarf zu setzen und daher grundsätzlich nicht in Variable aufzunehmen), dann eben:
FOR /F "eol=; delims=" %%i in ('find "07=" SConfig.ini') do "set Drive=%%~di\"
Grüße
bastla
Ich hätte da jetzt auch noch eine Frage zu dem Thema:
Ich will aus einer TXT File Zeile für Zeile auslesen und jede Zeile in eine Variable speichern.
TXT File:
h640 v480 b32 f60
h640 v480 b16 f75
h640 v480 b32 f60
h640 v480 b16 f75
Jetzt soll meine Batch die erste Zeile nehmen und in die Variable %res% schreiben. Danach führe ich etwas damit aus und dann soll die zweite Zeile in %res% geschreiben werden.
FOR /f %%f IN (resolutions.txt) DO echo %%f
soweit bin ich schonmal gekommen, aber er liest mir nur h640 aus und lässt den restlichen teil der Zeile weg.
set /a res=FOR /f %%f IN (resolutions.txt) DO echo %%f
so könnte ich das ja dann in %res% schreiben oder?
Kann mir da jemand helfen?
Danke schonmal
Ich will aus einer TXT File Zeile für Zeile auslesen und jede Zeile in eine Variable speichern.
TXT File:
h640 v480 b32 f60
h640 v480 b16 f75
h640 v480 b32 f60
h640 v480 b16 f75
Jetzt soll meine Batch die erste Zeile nehmen und in die Variable %res% schreiben. Danach führe ich etwas damit aus und dann soll die zweite Zeile in %res% geschreiben werden.
FOR /f %%f IN (resolutions.txt) DO echo %%f
soweit bin ich schonmal gekommen, aber er liest mir nur h640 aus und lässt den restlichen teil der Zeile weg.
set /a res=FOR /f %%f IN (resolutions.txt) DO echo %%f
so könnte ich das ja dann in %res% schreiben oder?
Kann mir da jemand helfen?
Danke schonmal
Hallo xachsewag!
Etwa so:
Mit "delims=" sorgst Du dafür, dass die Zeile nicht an den Leerzeichen getrennt werden (diese sind, zusammen mit TAB, die Standardtrennzeichen in einer "for"-Schleife).
Im Unterprogramm ":ProcessLine" kannst Du die entsprechenden Verarbeitungsschritte vornehmen, wobei die Zeile als %1 (in Anführungszeichen, damit wiederum nicht an den Leerzeichen getrennt wird) bzw als %~1 (ohne Anführungszeichen) zur Verfügung steht.
Grüße
bastla
Etwa so:
@echo off & setlocal
FOR /f "delims=" %%f IN (resolutions.txt) DO call :ProcessLine "%%f"
goto :eof
:ProcessLine
echo Die Zeile: %~1
set "res=%~1"
echo Variableninhalt: %res%
goto :eof
Im Unterprogramm ":ProcessLine" kannst Du die entsprechenden Verarbeitungsschritte vornehmen, wobei die Zeile als %1 (in Anführungszeichen, damit wiederum nicht an den Leerzeichen getrennt wird) bzw als %~1 (ohne Anführungszeichen) zur Verfügung steht.
Grüße
bastla
Hallo, ich hätte dazu auch eine Frage,
möchte mir ausnachname und vorname einen loginnamen basteln.
z.b test dummy d.test
dazu bräuchte ich das erste zeichen vom vornamen (bei mir %%j)
ich scheitere an dem Set "Rk-Loginname=%%%j:~,1%"
das input file schaut so aus:
Nachname;Vorname;Homeserver;Anmeldeskript;ServerProfil;Terminalprofil;Nebenstelle
Test;Dummy;Lvsfile01;login.bat;Ja;Ja;10888
Die Batch:
@echo Off & setlocal EnableDelayedExpansion
cls
Set WorkDir=H:\NewUser
Set InputFile=newuser.txt
Set OutputDir=Output
Set TempDir=Temp
Set Def_Gruppe=Domänen_Benutzer
If Not Exist %WorkDir%\Output Md %OutputDir%
If Not Exist %WorkDir%\%TempDir% Md %TempDir%
for /f "delims=; tokens=1,2,3,4,5,6,7 skip=1" %%i in (%WorkDir%\%InputFile%) Do (
Echo Benutzerdaten:
Echo Nachname=%%i
Echo Vorname=%%j
Set "Rk-Loginname=%%%j:~,1%"
Echo Rk-Loginname=%Rk-Loginname%
Echo Anzeigename=%%i %%j
Echo E-Mail=%%j.%%i@st.roteskreuz.at
Echo Gruppen=%Def_Gruppe%
Echo Homedrive=H:
Echo Homeverz=\\%%k\users\%Rk-Loginname%
Echo Passwort=zufall
Echo ServerProfile=%%m
Echo Terminalserverprofile=%%n
Echo Loginscript=%%l
Echo Nebenstelle=%%o
Echo.
Echo Set RK-Nachname=%%i >%Workdir%\%OutPutDir%\%%i.bat
Echo Set RK-Vorname=%%j >>%Workdir%\%OutPutDir%\%%i.bat
)
danke
jürgen
möchte mir ausnachname und vorname einen loginnamen basteln.
z.b test dummy d.test
dazu bräuchte ich das erste zeichen vom vornamen (bei mir %%j)
ich scheitere an dem Set "Rk-Loginname=%%%j:~,1%"
das input file schaut so aus:
Nachname;Vorname;Homeserver;Anmeldeskript;ServerProfil;Terminalprofil;Nebenstelle
Test;Dummy;Lvsfile01;login.bat;Ja;Ja;10888
Die Batch:
@echo Off & setlocal EnableDelayedExpansion
cls
Set WorkDir=H:\NewUser
Set InputFile=newuser.txt
Set OutputDir=Output
Set TempDir=Temp
Set Def_Gruppe=Domänen_Benutzer
If Not Exist %WorkDir%\Output Md %OutputDir%
If Not Exist %WorkDir%\%TempDir% Md %TempDir%
for /f "delims=; tokens=1,2,3,4,5,6,7 skip=1" %%i in (%WorkDir%\%InputFile%) Do (
Echo Benutzerdaten:
Echo Nachname=%%i
Echo Vorname=%%j
Set "Rk-Loginname=%%%j:~,1%"
Echo Rk-Loginname=%Rk-Loginname%
Echo Anzeigename=%%i %%j
Echo E-Mail=%%j.%%i@st.roteskreuz.at
Echo Gruppen=%Def_Gruppe%
Echo Homedrive=H:
Echo Homeverz=\\%%k\users\%Rk-Loginname%
Echo Passwort=zufall
Echo ServerProfile=%%m
Echo Terminalserverprofile=%%n
Echo Loginscript=%%l
Echo Nebenstelle=%%o
Echo.
Echo Set RK-Nachname=%%i >%Workdir%\%OutPutDir%\%%i.bat
Echo Set RK-Vorname=%%j >>%Workdir%\%OutPutDir%\%%i.bat
)
danke
jürgen
Hallo juergi69 und willkommen im Forum!
Du hast zwar "DelayedExpansion" eingeschaltet, verwendest sie aber nicht - dies und die Berücksichtigung der Tatsache, dass aus Laufvariablen der "for"-Schleifen keine Teilstrings gebildet werden können, sollte zu etwa folgendem (ungetesteten) Ansatz führen:
Grüße
bastla
Du hast zwar "DelayedExpansion" eingeschaltet, verwendest sie aber nicht - dies und die Berücksichtigung der Tatsache, dass aus Laufvariablen der "for"-Schleifen keine Teilstrings gebildet werden können, sollte zu etwa folgendem (ungetesteten) Ansatz führen:
@Echo Off & setlocal EnableDelayedExpansion
cls
Set WorkDir=H:\NewUser
Set InputFile=newuser.txt
Set OutputDir=Output
Set TempDir=Temp
Set Def_Gruppe=Domänen_Benutzer
If Not Exist %WorkDir%\Output Md %OutputDir%
If Not Exist %WorkDir%\%TempDir% Md %TempDir%
for /f "delims=; tokens=1,2,3,4,5,6,7 skip=1" %%i in (%WorkDir%\%InputFile%) Do (
Echo Benutzerdaten:
Echo Nachname=%%i
Echo Vorname=%%j
Set "Vorname=%%j"
Set "Rk-Loginname=!Vorname:~,1!%%i"
Echo Rk-Loginname=!Rk-Loginname!
Echo Anzeigename=%%i %%j
Echo E-Mail=%%j.%%i@st.roteskreuz.at
Echo Gruppen=%Def_Gruppe%
Echo Homedrive=H:
Echo Homeverz=\\%%k\users\!Rk-Loginname!
Echo Passwort=zufall
Echo ServerProfile=%%m
Echo Terminalserverprofile=%%n
Echo Loginscript=%%l
Echo Nebenstelle=%%o
Echo.
Echo Set RK-Nachname=%%i >%Workdir%\%OutPutDir%\%%i.bat
Echo Set RK-Vorname=%%j >>%Workdir%\%OutPutDir%\%%i.bat
)
bastla
hallo bastla,
danke für die schnelle antwort!
die EnableDelayedExpansion brauch ich glaube ich für die folgende if abfrage:
hab dabei noch ein kleines problem
Echo Nachname=%%i
Echo Vorname=%%j
Set "Vorname=%%j"
Set "Rk-Loginname=!Vorname:~,1!.%%i"
Echo Rk-Loginname=!Rk-Loginname!
net user !Rk-Loginname! >nul
If !ERRORLEVEL! EQU 0 Echo Error User !Rk-Loginname! bereits vorhanden!!!
Echo Anzeigename=%%i %%j
das funktionert, ich möchte nun aus der for schleife raus, wenn der benutzer vorhanden ist
ziel des ganzen ist es, wie du sicher schon bemerkt hast, user mittels dsadd anzulegen,
z.b. Echo dsadd -samid !Rk-Loginname! -fn %%j -ln %%i -pwd zufall usw >>new_user.bat
nachdem die new_user.bat durch ist
noch ein zufälliges passwort setzen mit z.b. net user !Rk-Loginname! /random
homeverz anlegen + acl usw....
noch ne frage
was ist der unterschied zw. %OutputDir% und !Rk-Loginname! (einmal% einmal!)
lg
jürgen
danke für die schnelle antwort!
die EnableDelayedExpansion brauch ich glaube ich für die folgende if abfrage:
hab dabei noch ein kleines problem
Echo Nachname=%%i
Echo Vorname=%%j
Set "Vorname=%%j"
Set "Rk-Loginname=!Vorname:~,1!.%%i"
Echo Rk-Loginname=!Rk-Loginname!
net user !Rk-Loginname! >nul
If !ERRORLEVEL! EQU 0 Echo Error User !Rk-Loginname! bereits vorhanden!!!
Echo Anzeigename=%%i %%j
das funktionert, ich möchte nun aus der for schleife raus, wenn der benutzer vorhanden ist
ziel des ganzen ist es, wie du sicher schon bemerkt hast, user mittels dsadd anzulegen,
z.b. Echo dsadd -samid !Rk-Loginname! -fn %%j -ln %%i -pwd zufall usw >>new_user.bat
nachdem die new_user.bat durch ist
noch ein zufälliges passwort setzen mit z.b. net user !Rk-Loginname! /random
homeverz anlegen + acl usw....
noch ne frage
was ist der unterschied zw. %OutputDir% und !Rk-Loginname! (einmal% einmal!)
lg
jürgen
Hallo juergi69!
Noch als Anmerkung: Wenn Du "delayedExpansion" verwendest, wird "!" als Variablenbegrenzer interpretiert und "verschwindet" daher (und bei paarweiser Verwendung auch alles dazwischen, wenn es nicht zufälliger Weise der Name einer existierenden Variable ist - es ist daher jedes einzelne Rufzeichen am Ende Deiner Fehlermeldung vergebene Liebesmüh ...
Grüße
bastla
die EnableDelayedExpansion brauch ich glaube ich für die folgende if abfrage:
Dafür eigentlich nicht (aber für die Bildung des Loginnamens ) - Du kannst auch folgende Varaiante verwenden:for /f "delims=; tokens=1,2,3,4,5,6,7 skip=1" %%i in (%WorkDir%\%InputFile%) Do (
net user %%i >nul 2^>^&1 && (
echo Error User !Rk-Loginname! bereits vorhanden
) || (
echo Echo Anzeigename=%%i %%j
echo ...
)
)
noch ne frage
was ist der unterschied zw. %OutputDir% und !Rk-Loginname! (einmal% einmal!)
Um innerhalb eines Blockes (Schleife, Klammern) in Batch veränderte Variableninhalte sofort ausgeben zu können, muss "delayedExpansion" erfolgen - und dann wird eben (siehe oben) anstelle von "%" das Rufzeichen als Variablenbegrenzer verwendet. %OutputDir% hast Du schon vor der Schleife festgelegt und es wird in der Schleife nicht verändert - es genügt daher die "Auflösung" (das Auslesen des Wertes) zu Beginn der Schleife (und muss nicht "delayed" vorgenommen werden).was ist der unterschied zw. %OutputDir% und !Rk-Loginname! (einmal% einmal!)
Grüße
bastla
Hallo,
hab mir den Beitrag "Batch XP Zwei echos in einer Zeile in Datei umleiten" jetzt schon zig mal durchgelesen, ich bekomms aber nicht hin:
Echo If Not Exist \\%%k\user\!Rk-Loginname! Md \\%%k\user\!Rk-Loginname!>>%OutPutDir%\%OutputFile%
Echo Echo j|CACLS \\%%k\user\!Rk-Loginname! /G Domänen-Admins:F !Rk-Loginname!:C >>%OutPutDir%\%OutputFile%
Echo Das Passwort für !Rk-Loginname! ist !Def_Passwort! >>%OutPutDir%\%Passwd_File%
Zeile 1 und 3 klappen, Zeile 2 geht nicht, habs auf alle möglichen Arten versucht.
hab mir den Beitrag "Batch XP Zwei echos in einer Zeile in Datei umleiten" jetzt schon zig mal durchgelesen, ich bekomms aber nicht hin:
Echo If Not Exist \\%%k\user\!Rk-Loginname! Md \\%%k\user\!Rk-Loginname!>>%OutPutDir%\%OutputFile%
Echo Echo j|CACLS \\%%k\user\!Rk-Loginname! /G Domänen-Admins:F !Rk-Loginname!:C >>%OutPutDir%\%OutputFile%
Echo Das Passwort für !Rk-Loginname! ist !Def_Passwort! >>%OutPutDir%\%Passwd_File%
Zeile 1 und 3 klappen, Zeile 2 geht nicht, habs auf alle möglichen Arten versucht.
Hallo juergi69!
Gehört zwar eigentlich nicht mehr in diesen Thread, aber gut ...
Wenn Du bestimmte Sonderzeichen in Batch nur ganz gewöhnlich ausgeben willst, musst Du diese mit einem vorangestellten "^" maskieren. Außerdem wird aus "%%" in Batch ein "%". Demzufolge:
Grüße
bastla
Gehört zwar eigentlich nicht mehr in diesen Thread, aber gut ...
Wenn Du bestimmte Sonderzeichen in Batch nur ganz gewöhnlich ausgeben willst, musst Du diese mit einem vorangestellten "^" maskieren. Außerdem wird aus "%%" in Batch ein "%". Demzufolge:
Echo Echo j^|CACLS \\%%%%k\user\!Rk-Loginname! /G Domänen-Admins:F !Rk-Loginname!:C >>%OutPutDir%\%OutputFile%
bastla
Hi bastla, ich habe ein ähnliches vorhaben, ich will einen satz vom benutzer mit
eingeben lassen. der kann so lange sein wie er will.
nun kann ich ja mit
die ersten 5 buchstaben auslesen.
also als beispiel
%eingabe1% = Hallo ich heise PFU
%EingabeNeu% = Hallo
wie kann ich jetzt die ersten 5 buchstaben aus der variabel %eingabe1% löschen?
set /p eingabe="Eingabe: "
nun kann ich ja mit
set "EingabeNeu=%eingabe1:~,5%
also als beispiel
%eingabe1% = Hallo ich heise PFU
%EingabeNeu% = Hallo
wie kann ich jetzt die ersten 5 buchstaben aus der variabel %eingabe1% löschen?
Moin PinkFLuffyUnicorn,
ich weiss ja nicht, ob es dafür nötig war, einen seit 6 Jahren erledigten Beitrag zu reanimieren.
Beispiel anm CMD-Prompt:
Grüße
Biber
ich weiss ja nicht, ob es dafür nötig war, einen seit 6 Jahren erledigten Beitrag zu reanimieren.
Beispiel anm CMD-Prompt:
C:\Users\Biber>set /p eingabe="Eingabe: "
Eingabe: hallo ich gebe irgendeinen langen String ein
C:\Users\Biber>set ei
eingabe=hallo ich gebe irgendeinen langen String ein
C:\Users\Biber>set "eingabe=%eingabe:~5%"
C:\Users\Biber>set ei
eingabe= ich gebe irgendeinen langen String ein
Grüße
Biber