loony666
Goto Top

Per Batch bestimmte Zeichenketten bzw. Stellen in Datei suchen und als Dateiname verwenden

Anfänger benötigt Hilfe

Hallo,

ich habe etliche Einträge zu diesem Thema gefunden, bin aber überhaupt nicht schlau draus geworden.
Vielleicht könnt Ihr bei meinem Problem Hifestellung leisten:
Ich habe eine Datei, welche den Dateinamen 1.out hat.
Inhalt der Datei ist: an Irgendeiner Stelle kommt eine Zeichenkette "ADREVER(+18 Blanks)" vor. Der Inhalt nach dieser Zeichenkette soll in der Länge 55 ohne Blank als erster Teil des Namens verwendet werden.
Gefolgt von einem _ und dann der Zweite Teil mit Zeichenkette "BORK(+4 Blanks)" nach dieser Länge 28 ohne Blanks.

Inhalt Datei:
ADREVER(+18 Blanks)Hallo(+50Blanks)68529356423
BORK(+4 Blanks)01012008(+20Blanks)563467

Ergebnis: Dateiname lautet -> Hallo_01012008.out

Die Stelle ist nur durch die Zeichenkette zu finden.
Das ist bestimmt Möglich, weiß nur nicht wie.

Danke für die Hilfe.

Marko

EDIT: Da die Blanks nicht angezeigt worden hab ich die in Klammer dazugeschrieben...

Content-ID: 80055

Url: https://administrator.de/forum/per-batch-bestimmte-zeichenketten-bzw-stellen-in-datei-suchen-und-als-dateiname-verwenden-80055.html

Ausgedruckt am: 23.12.2024 um 08:12 Uhr

lowbyte1
lowbyte1 07.02.2008 um 02:13:07 Uhr
Goto Top
helo loony666


so wie ich das verstanden habe suchst du das ...

getestet mit txt file namens 1.out


@echo off & setlocal
set "e=echo."  
Findstr /R "ADREVER BORK" 1.out.txt >> test5.txt  
For /F "tokens=2" %%i in (test5.txt) do call :ProcessLine "%%i"  
%e%
%e%Ergebnis: Dateiname lautet - %var%_%var1%.out
ren 1.out.txt %var%_%var1%.out                                                                                                            
%e% & %e% & %e%
pause
del test5.txt
endlocal & exit

:ProcessLine
	
if not defined var (
	     	Set "var=%~1"  
	) else (
	    	Set "var1=%~1"  
  )
goto:eof



lowbyte
loony666
loony666 07.02.2008 um 09:14:38 Uhr
Goto Top
Moin lowbyte,

perfekt! Vielen Dank für die Umsetzung!
Kann man das auch für alle Dateien *.out.txt durchführen?
Im Moment muss ja der Dateiname Fest vorgegeben werden.
Könntest du mir evtl. auch erklären warum das so funktioniert?

Danke

Marko
loony666
loony666 07.02.2008 um 14:15:36 Uhr
Goto Top
Ich nochmal face-smile

Also die Schleife war einfach...

Klappt jetzt alles!

Eine kleine Erklärung zu dem Code währe trotzdem lieb.
Ich kann es noch nicht 100%tig verstehen face-sad

Marko
lowbyte1
lowbyte1 08.02.2008 um 00:08:31 Uhr
Goto Top
helo marko

wen du ein paar dateien umbenennen willst ...
dieser code_schnipsel funktioniert nur wen die dateien alle (inkrementierent) bennant sind zbsp: 1.out.txt 2.out.txt 3.out.txt usw.
und die findstr argumente wie ADREVER und BORK auch gleich bleiben.

echo.wieviele dateien möchtest du umbenennen?
echo.input:
set /P input=
for /L %%a in (1,1,%input%) do Findstr /R "ADREVER BORK" %%a.out.txt >> test%%a.txt  
dann weiter verarbeiten ...



code erklärung

@echo off & setlocal                                                                          1.echo off  //  Startet die Begrenzung des Gültigkeitsbereiches von Änderungen.
                                                                                                              Änderungen der Umgebung nach SETLOCAL sind nur auf die Batchdatei bezogen.
set "e=echo."                                                                                 2.befehl echo. wird der variable e zugewisen.  
Findstr /R "ADREVER BORK" 1.out.txt >> test5.txt  
For /F "tokens=2" %%i in (test5.txt) do call :ProcessLine "%%i"                               3.liest das 2.te token aus der test5.txt, danach wird der codeblock :ProcessLine ge-callt (in abschnitt 4.) und im das argument %%i übergeben.  
                                                                                                in diesem fall läuft bei dir die schleife genau 2 mal weil du 2 werte ausliest und danach var und var1 zuweist.
%e%
%e%Ergebnis: Dateiname lautet - %var%_%var1%.out                                              7.wen die 2 variablen ein wert haben setzten wir die strings zusammen und zeigen das ergebniss an.
ren 1.out.txt %var%_%var1%.out                                                                8.wir benennen die datei um. in %var%_%var1%.out
%e% & %e% & %e%                                                                               9.das sind nur echos (das wird dich verwirrt haben).
pause                                                                                        10.break
del test5.txt                                                                                11.lösche test5.txt
endlocal & exit                                                                              12.beendet die begrenzung des gültigkeitsbereiches von änderungen.  und batch schlissen.
                                                                                     

:ProcessLine                                           4. codeblock :ProcessLine .
	
if not defined var (                                   5. falls nicht definiert variable  "var"         
	     	Set "var=%~1"                             argument %%i variable "var" zuweisen.  
	) else (                                          sonst ....
	    	Set "var1=%~1"                            argument %%i variable "var1" zuweisen.  
  )
goto:eof                                               6. in diesem fall end of codeblock. danach sprung zurück nach abschnitt 3.


lowbyte
loony666
loony666 08.02.2008 um 08:27:41 Uhr
Goto Top
Moin lowbyte,

vielen Dank auch für die Erklärung. Jetzt verstehe ich auch was ich da eingegeben habe face-smile

Marko