Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Batch - Die ersten 3 Zeichen einer bestimmten Variablen oder einer TXT Datei auslesen

Frage Entwicklung Batch & Shell

Mitglied: cced-de

cced-de (Level 1) - Jetzt verbinden

19.10.2008, aktualisiert 16.12.2008, 14648 Aufrufe, 14 Kommentare

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
Mitglied: bastla
19.10.2008 um 21:58 Uhr
Hallo cced-de und willkommen im Forum!

Du kannst zwar die ersten 3 Zeichen einer Variablen mit
set "Drive=%Quelle:~,3%"
einer neuen Variablen zuweisen, was Du aber vorhast solltest Du besser so lösen:
FOR /F "eol=; delims=" %%i in ('find "07=" SConfig.ini') do "set Drive=%%~di"
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:
FOR /F "eol=; delims=" %%i in ('find "07=" SConfig.ini') do "set Drive=%%~di\"
Grüße
bastla
Bitte warten ..
Mitglied: cced-de
20.10.2008 um 08:35 Uhr
Wow.. das ging schnell.
Danke für die Prompte Antwort !
Die Nächste Frage steht auch schon im Raum

LG
CCED
Bitte warten ..
Mitglied: xachsewag
21.10.2008 um 13:48 Uhr
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
Bitte warten ..
Mitglied: bastla
21.10.2008 um 15:24 Uhr
Hallo xachsewag!

Etwa so:
01.
@echo off & setlocal 
02.
FOR /f "delims=" %%f IN (resolutions.txt) DO call :ProcessLine "%%f" 
03.
goto :eof 
04.
 
05.
:ProcessLine 
06.
echo Die Zeile: %~1 
07.
set "res=%~1" 
08.
echo Variableninhalt: %res% 
09.
goto :eof
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
Bitte warten ..
Mitglied: juergi69
15.12.2008 um 13:57 Uhr
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
Bitte warten ..
Mitglied: bastla
15.12.2008 um 14:42 Uhr
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:
01.
@Echo Off & setlocal EnableDelayedExpansion 
02.
 
03.
cls 
04.
Set WorkDir=H:\NewUser 
05.
Set InputFile=newuser.txt 
06.
Set OutputDir=Output 
07.
Set TempDir=Temp 
08.
 
09.
Set Def_Gruppe=Domänen_Benutzer 
10.
 
11.
If Not Exist %WorkDir%\Output Md %OutputDir% 
12.
If Not Exist %WorkDir%\%TempDir% Md %TempDir% 
13.
 
14.
for /f "delims=; tokens=1,2,3,4,5,6,7 skip=1" %%i in (%WorkDir%\%InputFile%) Do ( 
15.
    Echo Benutzerdaten: 
16.
    Echo Nachname=%%i 
17.
    Echo Vorname=%%j 
18.
    Set "Vorname=%%j" 
19.
    Set "Rk-Loginname=!Vorname:~,1!%%i" 
20.
    Echo Rk-Loginname=!Rk-Loginname! 
21.
    Echo Anzeigename=%%i %%j 
22.
    Echo E-Mail=%%j.%%i@st.roteskreuz.at 
23.
    Echo Gruppen=%Def_Gruppe% 
24.
    Echo Homedrive=H: 
25.
    Echo Homeverz=\\%%k\users\!Rk-Loginname! 
26.
    Echo Passwort=zufall 
27.
    Echo ServerProfile=%%m 
28.
    Echo Terminalserverprofile=%%n 
29.
    Echo Loginscript=%%l 
30.
    Echo Nebenstelle=%%o 
31.
    Echo. 
32.
 
33.
    Echo Set RK-Nachname=%%i >%Workdir%\%OutPutDir%\%%i.bat 
34.
    Echo Set RK-Vorname=%%j >>%Workdir%\%OutPutDir%\%%i.bat 
35.
)
Grüße
bastla
Bitte warten ..
Mitglied: juergi69
15.12.2008 um 15:12 Uhr
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
Bitte warten ..
Mitglied: bastla
15.12.2008 um 15:33 Uhr
Hallo juergi69!

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 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 ...
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).

Grüße
bastla
Bitte warten ..
Mitglied: juergi69
16.12.2008 um 10:20 Uhr
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.
Bitte warten ..
Mitglied: bastla
16.12.2008 um 10:34 Uhr
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:
Echo Echo j^|CACLS \\%%%%k\user\!Rk-Loginname! /G Domänen-Admins:F !Rk-Loginname!:C >>%OutPutDir%\%OutputFile%
Grüße
bastla
Bitte warten ..
Mitglied: PinkFLuffyUnicorn
29.04.2016 um 11:57 Uhr
Hi bastla, ich habe ein ähnliches vorhaben, ich will einen satz vom benutzer mit
01.
 set /p eingabe="Eingabe: "
eingeben lassen. der kann so lange sein wie er will.
nun kann ich ja mit
01.
set "EingabeNeu=%eingabe1:~,5%
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?
Bitte warten ..
Mitglied: Biber
29.04.2016 um 13:18 Uhr
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:
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
Bitte warten ..
Mitglied: bastla
29.04.2016, aktualisiert um 16:36 Uhr
... wobei ja auch heute noch mit
set /?
(besonders interessant wird's in diesem Zusammenhang nach
Das Ersetzen von Umgebungsvariablen wurde folgendermaßen erweitert:
) die Online-Hilfe zur Verfügung stehen sollte ...

Grüße
bastla
Bitte warten ..
Mitglied: PinkFLuffyUnicorn
29.04.2016 um 18:20 Uhr
wollte halt keinen neuen thread öffnen :D
aber thx, dein systempfad ist nur da wegen @echo off, den kann ich einfach weghauen oder?
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Batch & Shell
gelöst In Batchdatei Variablen befüllen - mit Werten aus einer TXT-Datei (6)

Frage von donnyS73lb zum Thema Batch & Shell ...

Batch & Shell
Ungewöhnliche Txt.Datei-Abfrage mit Batch (3)

Frage von DaTobsn zum Thema Batch & Shell ...

Webentwicklung
HTML Output in eine txt Datei mit VisualBasicScript (2)

Frage von coca22COCA zum Thema Webentwicklung ...

Batch & Shell
Merkwürdige Zeilenformatierung in txt Datei (3)

Frage von miczar zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Windows Server
DHCP Server switchen (25)

Frage von M.Marz zum Thema Windows Server ...

SAN, NAS, DAS
gelöst HP-Proliant Microserver Betriebssystem (14)

Frage von Yannosch zum Thema SAN, NAS, DAS ...

Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

Windows 7
Verteillösung für IT-Raum benötigt (12)

Frage von TheM-Man zum Thema Windows 7 ...