webrunner1
Goto Top

Batch Datei soll String aus einer oder mehreren Dateien auslesen

Hallo zusammen,

ich möchte via Batch aus einer oder mehreren Text-Dateien einen String (steht immer an gleicher Stelle)
auslesen, diesen String als Verzeichnis anlegen (sofern nicht schon vorhanden) und die ausgelesene(n) Datei(en)
in diese(s) Verzeichnis(se) verschieben.

Habe mich in diesem Forum schon einige Hinweise gefunden. Bekomme aber nur den Strin aus einer Datei gelesen.

Kann dazu jemand weiterhelfen?

Vielen Dank schon mal für die Hilfe.

Gruss webrunner1

Content-ID: 206503

Url: https://administrator.de/forum/batch-datei-soll-string-aus-einer-oder-mehreren-dateien-auslesen-206503.html

Ausgedruckt am: 28.12.2024 um 23:12 Uhr

TsukiSan
TsukiSan 15.05.2013 um 13:38:35 Uhr
Goto Top
Hallo webrunner1,

findstr /?
und
set /?
in der Konsole eingegeben sind deine Freunde oder ES.

Wie sieht denn dein bisheriger Code aus?

Gruss
Tsuki
webrunner1
webrunner1 15.05.2013 um 14:25:04 Uhr
Goto Top
Hallo Tsuki,

sorry, den habe ich übersehen zu posten:


set dateipfad=c:\temp\
set dateimaske=DEL*.TMP

for /f "delims=" %%a in ('findstr /n /v "qwertzuiop" %dateipfad%%dateimaske% ^|findstr "^1:"') do @set "%dateipfad%%dateimaske%=%%a"

echo %dateipfad%%dateimaske%ln:~11,6%


Wenn anstelle der Variablen in der FOR-Anweisung ein fester Name gesetzt wird, wird der String gefunden.

In der FOR-Anweisung wird das Ergebnis als Variable ausgegeben, evtl. könnte man gleich das Kopieren in den
Ordner mit dem gesuchten String veranlassen.

Ich hoffe, dass ich mit einigermaßen verständlich ausgedrückt haben.

Gruss
bastla
bastla 15.05.2013 um 15:12:33 Uhr
Goto Top
Hallo webrunner1 und willkommen im Forum!

Ich versuche mal, zu interpretieren: Der in allen "DEL*.TMP"-Dateien enthaltene String befindet sich jeweils in der ersten Zeile ab Position 12 und ist 6 Zeichen lang - falls ja, dann (völlig ungetestet) etwa so:
@echo off & setlocal
set "dateipfad=c:\temp\"  
set "dateimaske=DEL*.TMP"  

pushd "%dateipfad%"  
for /f "delims=" %%i in ('dir /b "%dateimaske%"') do call :ProcessFile "%%i"  
popd
pause
goto :eof

:ProcessFile
set /p Zeile1=<%1
set "Verzeichnis=%Zeile1:~11,6%"  
md "%Verzeichnis%" 2>nul  
echo move %1 "%Verzeichnis%"  
goto :eof
Die Verzeichnisse werden erstellt, das Verschieben aber wegen des "echo" in Zeile 15 nur durch Ausgabe des "move"-Befehls simuliert. Wenn das Ergebnis vernünftig aussieht, einfach dieses "echo" entfernen ...

Grüße
bastla
webrunner1
webrunner1 15.05.2013 um 15:55:36 Uhr
Goto Top
Hallo bastla,

die ersten Tests schauen vielversprechend aus.
Vielen Dank für die schnelle Unterstützung.

Gruss webrunner1

P.S. falls ich beim weiteren Ausbau der Routine auf Probleme stoße, werde ich mich nochmal melden.
webrunner1
webrunner1 17.05.2013 um 08:22:34 Uhr
Goto Top
Hallo bastla,

ich konnte die Routine den Anforderungen soweit anpassen.

Irgendwie steh ich im Wald und komme bei einer Sache (leider) noch nicht weiter:
Was muss in das Script noch eingebaut werden, damit nach dem Abschnitt :ProcessFile
(nachdem die Datei(en) abgearbeitet wurde(n)) noch weitere Anweisungen eingebaut werden können?

Vielen Dank schon mal für die Antwort.

Gruss webrunner1
Biber
Biber 17.05.2013 um 10:44:36 Uhr
Goto Top
Moin webrunner1,

wenn der Batch noch irgendetwas machen soll, nachdem die einzelnen Dateien in :ProcessFile verarbeitet worden sind, dann diesen Code vor die jetzige Zeile "pause" einfügen.

wenn der Batch noch irgendetwas mit den einzelnen Dateien in :ProcessFile machen soll, dann diesen Code vor die jetzige Zeile "goto :eof" in :ProcessFile einfügen.

Grüße
Biber
webrunner1
webrunner1 20.05.2013 um 12:59:41 Uhr
Goto Top
Hallo Biber,

danke das war's!

Gruss webrunner1