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-Key: 206503

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

Printed on: April 25, 2024 at 12:04 o'clock

Member: TsukiSan
TsukiSan May 15, 2013 at 11:38:35 (UTC)
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
Member: webrunner1
webrunner1 May 15, 2013 at 12:25:04 (UTC)
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
Member: bastla
bastla May 15, 2013 at 13:12:33 (UTC)
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
Member: webrunner1
webrunner1 May 15, 2013 at 13:55:36 (UTC)
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.
Member: webrunner1
webrunner1 May 17, 2013 at 06:22:34 (UTC)
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
Member: Biber
Biber May 17, 2013 at 08:44:36 (UTC)
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
Member: webrunner1
webrunner1 May 20, 2013 at 10:59:41 (UTC)
Goto Top
Hallo Biber,

danke das war's!

Gruss webrunner1