Top-Themen

Aktuelle Themen (A bis Z)

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 Zeilenweise auslesen und in Variablen speichern

Mitglied: Apop85

Apop85 (Level 1) - Jetzt verbinden

16.04.2013, aktualisiert 08:57 Uhr, 1330 Aufrufe, 11 Kommentare, 1 Danke

Hallo erstmal.
Ich hab schon zig einträge dieser Art hier gefunden und trozdem... bin ich wieder da...

Ich hab das Script von einem anderen Thread hier übernommen und in der Test-Bat funktioniert dies auch Tip Top, nur meine implementierung in das Hauptscript will einfach nicht hinhauen...

Original:
01.
@echo off 
02.
set line= 
03.
set /a count=0 
04.
FOR /f "delims=" %%f IN ('type "test.txt"') DO call :ProcessLine "%%f" 
05.
 
06.
exit 
07.
:ProcessLine 
08.
if %count%==0 goto :NewLine 
09.
set /a count+=1 
10.
If %count% GTR 1 goto :NewLine 
11.
goto :eof 
12.
:NewLine 
13.
If %count% neq 0 echo %count% - %line% - %workflow% 
14.
set "line=%~1" 
15.
set /a count=1 
16.
goto :eof
Meine Implementierung:
01.
02.
03.
04.
:LISTUSER 
05.
if exist %tmp%\rlh.tmp del %tmp%\rlh.tmp 
06.
if not exist %tmp%\userlist.tmp copy NUL %tmp%\userlist.tmp >NUL 
07.
if not exist %tmp%\rlh.tmp copy NUL %tmp%\rlh.tmp >NUL 
08.
 
09.
wbat cls (+white on +red) ! text 0 :title #%zpos% +5 
10.
wbat text (black on +white) 12,28 "Datenbank wird ausgelesen..." 
11.
 
12.
set /a counter=0 
13.
set zeile= 
14.
for /f "delims=" %%f IN ('type "%cd%\user\system.cry"') DO call :WORKFLOW "%%f" 
15.
goto USERLIST 
16.
 
17.
:WORKFLOW 
18.
if %counter% == 0 goto WORKFLOW2 
19.
set /a counter+=1 
20.
if %counter% GTR 1 goto WORKFLOW2 
21.
goto :eof 
22.
 
23.
:WORKFLOW2 
24.
if defined zeile echo %zeile% >>%tmp%\rlh.tmp 
25.
set suchstr=%zeile:~-21% 
26.
 
27.
for /f "tokens=1-2 delims=-" %%i in ('findstr "%suchstr%" "%tmp%\rlh.tmp"') do ( 
28.
	set "liID=%%i" 
29.
	set "cryptli=%%j" 
30.
31.
 
32.
set "zeile=%~1"  
33.
set /a counter=1 
34.
 
35.
set... definitionen für %liname% und %linaname% 
36.
 
37.
rem -- Ausgang für Suche nach einer bestimmten Zeile ---- 
38.
if "%wbat%" == "%liname% %linaname%" goto USERINFO 
39.
rem ---------------------------------------------------- 
40.
 
41.
>>%tmp%\userlist.tmp echo %liname% %linaname% --> Auflistung der gefundenen Zeilen 
42.
 
43.
goto :eof 
44.
45.
46.
.
Er scheint zwar zu erkennen, dass das Dokument nur zwei Zeilen besitzt jedoch habe ich in der Ausgabe schlussendlich zwei gleiche Einträge (der ersten Zeile) in meiner tmp. Daher auch meine Annahme, dass er die Zeilenanzahl richtig erkennt...

Ich seh langsam den Wald vor lauter Bäumen nicht... Ich sehe in den Wesentlichen Befehlen der zwei Scripts keine Unterschiede...

Wo zum Kuckuck hab ich da mist gebaut? ^^

Grüsse Apop

P.S:
Die wbat-Befehle sind aus dem Batch-Utility WBAT
Mitglied: Endoro
16.04.2013 um 10:46 Uhr
Hallo Apop85,

ich habe keinerlei Lust mich mit diesem cruden Code auseinander zusetzen! Weiss nicht, ob sonst jemand.

Vielleicht kannst du ja einfach mal dazu sagen, was der machen soll und nicht, wo du ihn gefunden hast.

Ausserdem: wer ist "wbat"? Muss ich den kennen ??


Gruss!
Bitte warten ..
Mitglied: Apop85
16.04.2013 um 12:03 Uhr
Hey @Endoro, mal wieder ;)
Danke für deine Aktive Unterstützung

Vielleicht kannst du ja einfach mal dazu sagen, was der machen soll und nicht, wo du ihn gefunden hast.
Er soll (ohne VBS, weil bei uns in der Firma nicht drin ) Zeile um Zeile einer datei Auslesen und Inhalte dieser Zeile als Variabel speichern (liname und linaname) danach zu nächsten und so weiter...



Ausserdem: wer ist "wbat"? Muss ich den kennen ??
https://www.administrator.de/wissen/batchutility-wbat-205045.html

Grüsse Apop
Bitte warten ..
Mitglied: Endoro
16.04.2013 um 13:03 Uhr
Hallo Apop85,

das folgende Programm liest alle Zeilen aus file.txt und speichert die in "var1", "var2" ... "varXX".

01.
@echo off&setlocal  
02.
for /f "tokens=1*delims=:" %%i in ('^< file.txt findstr /n "^"') do set "var%%i=%%j"

Gruss!
Bitte warten ..
Mitglied: Apop85
16.04.2013 um 13:56 Uhr
Da hängt er sich auf...

01.
for /f "tokens=1*delims=:" %%i in ('^< test.txt findstr /n "^"') do set "var%%i=%%j"
Ich weiss ja du willst dich nicht zu sehr in das Geknurze reinlesen aber ich Post trozdem mal meinen Ansatz (CUT-Version -) )

01.
@echo off 
02.
setlocal ENABLEDELAYEDEXPANSION 
03.
:1 
04.
set counter=0 
05.
for /f "tokens=1*delims=:" %%i in ('^< test.txt findstr /n "^"') do set "var%%i=%%j" 
06.
 
07.
:2 
08.
set /a counter+=1 
09.
set outp=var%counter% 
10.
if "!%outp%!" == "" goto :eof   
11.
if "!%outp%!" neq "" echo %zeile%>>rlh.tmp 
12.
 
13.
set zeile=%zeile:~-21% 
14.
for /f "tokens=1-2 delims=-" %%i in ('findstr %zeile% "^"')  
15.
   ( do set "liID=%%j" & do set "cryptli=%%k" ) 
16.
    
17.
set "b1=%cryptli:~13,1%" & set "p1=%cryptli:~18,1%" 
18.
 
19.
... entschlüsselung in Username und Benutzerrechte... 
20.
 
21.
set "liname=%b1%%b2%%b3%%b4%%b5%%b6%%b7%%b8%" 
22.
set "linaname=%p1%%p2%%p3%%p4%%p5%%p6%%p7%%p8%" 
23.
set "livis=%v1%%v2%%v3%" 
24.
set "lirights=%r1%%r2%" 
25.
 
26.
if "%lirights%" == "ad" set "lirights=Admin" else set "lirights=User" 
27.
if "%wbat%" == "%liname% %linaname%" goto USERINFO 
28.
 
29.
>>%tmp%\userlist.tmp echo %liname% %linaname% 
30.
 
31.
goto 2
Diese userlist.tmp verwender ich dann mittels WBAT als Listenanzeige daher das mühsame Entschlüsseln.

Gruss
Bitte warten ..
Mitglied: Endoro
16.04.2013 um 14:21 Uhr
Zitat von Apop85:
Da hängt er sich auf...

Ich habe grad mal ohne Probleme eine TXT mit 10.000 Zeilen und 50 Buchstaben / Zeile eingelesen. Wie gross ist deine TXT? Was hast du für ein System?


Gruss!
Bitte warten ..
Mitglied: Apop85
16.04.2013 um 15:12 Uhr
Wie gross ist deine TXT? Was hast du für ein System?
Winzig bis jetzt ^^. Hab Grad mal 14 Zeilen in der test.txt drin. Da drin steht nur x. Zeile y. Zeile....

Im richtigen File sind die Daten folgendermassen hinterlegt:

00000000-semg3ndhuf1kpaljb2ico - Sind zwei Infos:[ID] - [Username,Rechte]

Aus dem möchte ich die ID und den Rest extrahieren. Den Rest Entschlüssel ich dann zu Name Rechte usw...

gruss.
Bitte warten ..
Mitglied: Endoro
16.04.2013, aktualisiert um 15:59 Uhr
"userID" und "rest" könnte gleich am Anfang getrennt werden, wenn ein "-" dazwischen ist:

01.
@echo off&setlocal 
02.
for /f "tokens=1-3delims=:-" %%i in ('^< file.txt findstr /n "^"') do set "userid%%i=%%j"&set "rest%%i=%%k"& set /a cnt+=1 
03.
for /l %%i in (1,1,%cnt%) do ( 
04.
	setlocal enabledelayedexpansion 
05.
	echo(userID: !userID%%i! Rest: !rest%%i! 
06.
	endlocal 
07.
)

Gruss!
Bitte warten ..
Mitglied: Apop85
18.04.2013, aktualisiert um 03:33 Uhr
Ja das geht so
Habs jetzt meinen Bedürfnissen etwas angepasst aber es will leider noch immer nicht so ganz

01.
for /f "tokens=1-3 delims=:-" %%i in ('^< "%server%\user\system.cry" findstr /n "^"') do set "userid%%i=%%j"&set "rest%%i=%%k"& set /a cnt+=1 
02.
for /l %%i in (1,1,%cnt%) do ( 
03.
	 
04.
 
05.
 
06.
set "b1=!rest%%i:~13,1!" & set "p1=!rest%%i:~18,1%! 
07.
usw... 
08.
 
09.
set "name=%b1%%b2%%b3%%b4%%b5%%b6%%b7%%b8%" 
10.
set "nachname=%p1%%p2%%p3%%p4%%p5%%p6%%p7%%p8%" 
11.
 
12.
set "visum=%v1%%v2%%v3%" 
13.
set "benutzerrechte=%r1%%r2%" 
14.
echo !userID!-!name!-!nachname!-!benutzerrechte!-!visum! >>%tmp%\user.lis  
15.
)
Ich hab dann pro Zeile die existiert einen Eintrag der ersten Zeile.
Also wenn Zeile 1 z.B. 00000000000-abcdefghijkl ist und Zeile 2 111111111111-mnopqrstuvw
dann hab ich in der user.lis zwei mal 00000000000-acefhjlbegik drin...bei vier Einträgen vier mal usw...
Die decodierung funktioniert soweit. Nur eben dass er nur immer das selbe decodiert.

Gruss Apop
Bitte warten ..
Mitglied: Endoro
18.04.2013, aktualisiert um 09:13 Uhr
Hallo Apop85,

wenn sich in Batch was überraschend nicht ändert was es eigentlich sollte liegt es meistens an der fehlenden verzögerten Erweiterung. Die muss aber vorsichtig benutzt werden, weil sie Ausrufungszeichen und Carets in Variablen rückstandsfrei entfernt. Allerdings nicht rückwirkend, weshalb ich sie in Forschleifen an- und ausschalte.

Beispiel für das Wirken der verzögerten Erweiterung:
01.
@echo off &setlocal  
02.
set "string1=a!!^^ ^^ b" 
03.
echo string1: "%string1%" 
04.
setlocal enabledelayedexpansion 
05.
echo string1: "!string1!" ^<--- alles noch da^^! 
06.
set "string2=%string1%" 
07.
echo string2: "%string2%" "!string2!" 
08.
set "string3=!string1!" 
09.
echo string3: "%string3%" "!string3!"
Output:
string1: "a!!^^ ^^ b" 
string1: "a!!^^ ^^ b" <--- alles noch da! 
string2: "a  b" "a^ ^ b" 
string3: "astring3" 
Gruss!
Bitte warten ..
Mitglied: Apop85
18.04.2013, aktualisiert um 17:11 Uhr
Hey Endoro. Jupp hattest recht musste noch etwas mit den Verzögerungen basteln und nun funktioniert es so wie ich will... Nur Zeile 11 will noch nicht. Da habe ich einen Ausgang falls in einem Menü ein bestimmter Name angewählt wurde. da geht er mir nicht aus enabledelayedexpansion raus... musste dann halt noch bei :USERINFO ein setlocal disabledelayedexpansion reinschreiben...
01.
for /f "tokens=1-3 delims=:-" %%i in ('^< "%server%\user\system.cry" findstr /n "^"') do set "userid%%i=%%j"&set "rest%%i=%%k"& set /a cnt+=1 
02.
for /l %%i in (1,1,%cnt%) do ( 
03.
 
04.
setlocal enabledelayedexpansion 
05.
 
06.
set "b1=!rest%%i:~13,1!" & set "p1=!rest%%i:~18,1!" 
07.
blablabla usw... 
08.
set "lirights=!r1!!r2!" 
09.
set "liID=!userID%%i!" 
10.
echo !liname!-!linaname! >>%tmp%\user.lis  
11.
if "%wbat%" == "!liname!-!linaname!" endlocal & goto USERINFO 
12.
endlocal 
13.
14.
 
Danke für deine Hilfe
Bitte warten ..
Mitglied: Apop85
18.04.2013 um 20:41 Uhr
Habs nun lösen können indem ich endlocal nicht verwendet habe sondern einfach das delayedexpansions wieder ausgeschaltet habe. Mit dem endlocal hat er mir ja die Variablen gelöscht bevor ich sie Anzeige

Ich danke dir für deine Hilfe

Liebe Grüsse Apop
Bitte warten ..
Ähnliche Inhalte
Batch & Shell

(BATCH:) Zeilenweise Txt auslesen und in eine Variable speichern

gelöst Frage von NincedBatch & Shell20 Kommentare

Hallo Leute, Ich weiß, es ist ein alter Hut, aber ich habe da ein paar Fragen bezüglich der for-Schleife ...

Batch & Shell

Text Zeilenweise auslesen und variable überprüfen

Frage von BruendlBatch & Shell11 Kommentare

Moin Moin, ich habe eine Textdatei mit folgendem Inhalt: ich möchte jetzt gerne die beiden Werte, die von einem ...

Batch & Shell

Textdatei zeilenweise in Variable schreiben

gelöst Frage von goodbytesBatch & Shell20 Kommentare

Hallo, mit einer Batch möchte ich mehrere Laufwerke mappen, abhängig vom Usernamen. Klar könnte ich auch für jeden User ...

Java

Textdatei in Array speichern (zeilenweise)

gelöst Frage von BruchsalJava1 Kommentar

Hallo, ich möchte aus einer Textdatei zeilenweise den Inhlat in ein String Array speicher. Ist das nur mit einem ...

Neue Wissensbeiträge
Windows 10
Zero-Day-Lücke in Microsoft Edge
Information von kgborn vor 2 TagenWindows 10

In Microsofts Edge-Browser klafft wohl eine nicht geschlossene (0-Day) Sicherheitslücke im Just In Time Compiler (JIT Compiler) für Javascript. ...

Sicherheit
Microsoft und Skype: Sicherheit
Information von kgborn vor 2 TagenSicherheit

Die Tage gab es ja einige Berichte zur Sicherheit des Skype-Updaters. Der Updater von Skype läuft unter dem Konto ...

Datenschutz

Behörden ignorieren Sicherheitsbedenken gegenüber Windows 10

Information von Penny.Cilin vor 3 TagenDatenschutz8 Kommentare

Hallo, passend zum Thema Ablösung LIMUX in München ein interessanter Beitrag dazu: Behörden ignorieren Sicherheitsbedenken gegenüber Windows 10 Anscheinend ...

Sicherheit
Information Security Hub Munich airport
Information von brammer vor 3 TagenSicherheit

Hallo, Neues Center für Cyber Kriminalität am Münchener Flughafen brammer

Heiß diskutierte Inhalte
Windows 10
Windows 10 (1709) Tastur und Maus wieder einschalten?
Frage von LochkartenstanzerWindows 1016 Kommentare

Moin, Ich habe von einem Kunden einen Win10-Rechner bekommen, bei dem weder Tastatur noch Maus geht. Die Hardware funktioniert ...

Humor (lol)
Was könnte man mit einem Server machen? Idee gesucht
Frage von 2SeitenHumor (lol)12 Kommentare

Hey Zusammen Ich habe einen alten HP G2 Rackserver zu Hause rumliegen. 28GB Ram, 1xAMD Prozi mit etwa 2GHz. ...

Server-Hardware
Server für Exchange 2016, Kaufberatung
Frage von MazenauerServer-Hardware10 Kommentare

Guten Tag werte Gemeinde, Vorab: Ich dachte es gab mal einen separaten Bereich für solche Anfragen, habe ich leider ...

Firewall
RB2011 Firewall Rule eine bestimmte Mac oder IP Adresse nicht zu blockieren
Frage von lightmanFirewall10 Kommentare

Hallo liebes Forum mit ihren Spezialisten. Ich habe meine Firewall so konfiguriert das kein Endgerät ohne meine Speziellen Erlaubnis ...