d3luxe
Goto Top

Batch, textdatei zeile für zeile auslesen und in variable schreiben

Hallo,
Meine batch soll eine art Script einlesen, dieses Skript soll in einer textdatei liegen! Es soll zeile für zeile lesen und jede zeile in die gleiche variable schreiben, Zeile1 kommt z.b. in Variable A dann soll es schauen was variable A ist und je nach dem zu nem punkt in der batch springen oder etwas bestimmtes tun! Dann soll es die nächste zeile einlesen! Das einlesen ist die grundlage! Deswegen habe ich noch nichts geschrieben! Mein problem ist das einlesen! Ich habe es mit ner for schleife versucht aber das geht nicht ganz, und die ganzen ergebnisse bei google oder hier im forum haben mir auch nicht wirklich weiter geholfen! Deswegen frage ich nochmal nach!

Achja wenn ich schonmal frage... ist es möglich mit "Dir" alle dateien von nem gewissen zeitraum aufzulisten zb. die letzten 4 monate also alles was geändert oder neu erstellt wurde aufzulisten? Oder soll ich für diese frage einen neuen Threat eröffnen?

Danke schonmal im vorraus,

MFG d3luxe

Content-ID: 111680

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

Ausgedruckt am: 26.11.2024 um 16:11 Uhr

bastla
bastla 17.03.2009 um 18:54:03 Uhr
Goto Top
Hallo d3luxe!

Schematisch etwa so:
@echo off & setlocal
for /f "usebackq delims=" %%i in ("D:\Dein Text.txt") do "set A=%%i" & call :ProcessLine  
goto :eof

:ProcessLine
echo Gelesene Zeile: %A%
::Auswertung hier
if /i "%A%"=="Start" goto :Start  
::
::weitere Auswertungen
::
::zurück zum Hauptprogramm
goto :eof

:Start
echo Die Zeile lautet: "Start"  
::was noch so anliegt ...
goto :eof
Grüße
bastla
d3luxe
d3luxe 17.03.2009 um 19:03:06 Uhr
Goto Top
Danke für die schnelle antwort bastla, ich werde das ganze jetzt probieren... kannst du mir auch noch die andere frage beantworten die ich oben dazueditiert hatte?
bastla
bastla 17.03.2009 um 20:25:11 Uhr
Goto Top
d3luxe
d3luxe 17.03.2009 um 22:27:01 Uhr
Goto Top
Hallo,
nachdem ich das problem mit dem log mit deiner hilfe gelöst hab gehts hier wieder weiter :D

Das script das mein programm verarbeiten soll, soll eigentlich nur löschen können!
Ich habe folgende makierungen für in das script geplant:

killprocess
deldata
delreg
delkey
changereg
deldir
alles unter killprocess sind prozesse die beendet werden sollen
alles unter deldata sind dateien die gelöscht werden sollen
alles unter delreg sind registryeinträge die gelöscht werden sollen
alles unter delkey sind registryschlüssen die gelöscht werden sollen
usw.

So... Jetzt muss das mein script erstmal feststellen was muss gemacht werden!

Für besseres verständnis werde ich erstma den quellcode posten!

 
@echo off & setlocal
echo ------------------------
echo   1=Log erstellen
echo   2=Script verarbeiten
echo ------------------------
set /p wa=
if %wa% = 2 goto :2
if %wa% = 1 goto :1
:2
for /f "usebackq delims=" %%i in ("D:\Dein Text.txt") do "set A=%%i" & call :ProcessLine  
goto :eof
:ProcessLine
if %A% == deldir
if %A% == changereg
if %A% == delkey
if %A% == delreg
if %A% == deldata goto data
if %A% == killprocess goto kill
:kill
dinge die getan werden sollen
:data

bei dinge die getan werden sollen muss es ja wieder neu auslesen und zwar zeile 2 aber das kann es in dem mom nicht.. wenn du verstehst was ich meine! Wie kann ich das machen das es erst ausliest was es ist den "typ" dann die dateien, brauche ich da 2 variablen und 2 schleifen? und was ist wenn die schleife die den Typ ausliest dann als wert eine datei bekommt also zb. an zeile 2 geht.. kannst du mir das ma erklären? Soll ich dann im Script die Typen speziell makieren? Mit nem : oder ; vorne oder hinten? damit das script weiß das ist ein typ das ist ein wert und wie mache ich das? ^^

Und dann soll es Das eigentliche script nicht an nem speziellen pfad suchen sondern dort wo die batch später startet!

Ich werde jetzt schlafen gehen! Lass dir ruhig zeit mit der antwort ich werde morgen so gegen 18:00 uhr wieder vorbeischauen :D
bastla
bastla 17.03.2009 um 23:03:19 Uhr
Goto Top
Hallo 3dluxe!

Wenn Du die einzelnen Zeilen eindeutig zuordenbar machst, kannst Du mit "findstr" die gerade benötigten herausfiltern, zB
killprocess:Prozess1
killprocess:Prozess2
killprocess:Prozess3
deldata:D:\Eine Datei.txt
deldata:D:\Eine weitere Datei.txt
deldata:D:\Noch eine Datei.txt
Zum Auslesen könntest Du dann eine Schleife dieser Art verwenden:
@echo off & setlocal
for %%i in (killprocess deldata delreg) do (
    for /f "tokens=1* delims=:" %%a in ('findstr /b "%%i:" "%~dp0\Script.txt"') do call :%%i "%%b"  
)
goto :eof

:killprocess
echo Prozess %1 beenden ...
::
::
goto :eof

:deldata
echo Loesche %1 ...
::
::
goto :eof

:delreg
echo Entferne RegKey %1
::
::
goto :eof
Anmerkung: Da die ausgeführte Batchdatei als Parameter %0 zur Verfügung steht, kannst Du mit "%~dp0" (siehe gegen Ende der Hilfe "for /?") Laufwerk und Pfad des Batches ermitteln und so die im selben Ordner liegende "Script.txt" finden.

Grüße
bastla
d3luxe
d3luxe 18.03.2009 um 20:05:15 Uhr
Goto Top
Danke bastler es funktioniert.. ich werd dich un administrator.de in der readme nennen :D Wenn das tool ma fertig is :D Ich lass ma noch ungelöst wer weiß schon was noch passiert!

Kannst du mir sagen ob es einen befehl gibt um prozesse zu beenden? Bei Vista habe ich ja taskkill und bei xp? Muss man da nachrüsten? ich hab mir schon was heruntergeladen.. aber ich wollte eiglich alles mit bordmitteln lösen... fällt dir noch was ein?
bastla
bastla 18.03.2009 um 21:44:47 Uhr
Goto Top
Hallo d3luxe!

"taskkill" (und "tasklist") gibt es auch bei XP.

Grüße
bastla
d3luxe
d3luxe 25.03.2009 um 16:20:03 Uhr
Goto Top
Also ich werde das ganze mal einbauen und testen, ich habe das Gefühl das ich bald auf ein weiteres Problem stoßen werde aber dazu werde ich dann wieder antworten.. und dieses mal wieder schneller ^^ ich werde nicht so schnell ins Krankenhaus müssen!