String aus einer Datei auslesen und datei damit umbenennen
ich bin Anfänger und bräuchte aber dringend Hilfe
Ich habe einen Ordner in dem befinden sich viele Dateien mit alle der gleichen Endung und Aufbau Z.B. 27127S01.pfl Die ersten 5 Zeichen sind immer gleich und die letzen 3 ändern sich.
Inerhalb der datei gibt es folgende Zeile:
...
...
SelectedPaperType=8
SelectedPaperName=A3
...
...
SelectedPaperName=A3 steht für ein DIN-Format in A3
ich möchte jetzt eine Batchdatei schreiben, die mit die Dateien ausliest und folgendermaßen umbenennt.
Wurde A3 gefunden dann sollte die Datei von 27127S01.PLF in A3S01.plf umbenannt werden
Wurde A4 gefunden dann sollte die Datei von 27127S01.PLF in A4S01.plf umbenannt werden
Das ist besitmmt kein großer Aufwand, aber ich bin am ende meier Fähigkeiten angelangt.
Für eine schnelle Hilfe wäre ich dankbar
mfg Matthias
Ich habe einen Ordner in dem befinden sich viele Dateien mit alle der gleichen Endung und Aufbau Z.B. 27127S01.pfl Die ersten 5 Zeichen sind immer gleich und die letzen 3 ändern sich.
Inerhalb der datei gibt es folgende Zeile:
...
...
SelectedPaperType=8
SelectedPaperName=A3
...
...
SelectedPaperName=A3 steht für ein DIN-Format in A3
ich möchte jetzt eine Batchdatei schreiben, die mit die Dateien ausliest und folgendermaßen umbenennt.
Wurde A3 gefunden dann sollte die Datei von 27127S01.PLF in A3S01.plf umbenannt werden
Wurde A4 gefunden dann sollte die Datei von 27127S01.PLF in A4S01.plf umbenannt werden
Das ist besitmmt kein großer Aufwand, aber ich bin am ende meier Fähigkeiten angelangt.
Für eine schnelle Hilfe wäre ich dankbar
mfg Matthias
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 80281
Url: https://administrator.de/contentid/80281
Ausgedruckt am: 26.11.2024 um 05:11 Uhr
9 Kommentare
Neuester Kommentar
Hallo Anfaenger99 und willkommen im Forum!
Grundsätzlich sollte das so gehen, falls Du die letzten 3 Stellen des ursprünglichen Dateinamens verwenden willst:
Zum Testen steht vor dem "ren"-Befehl ein "REM", wodurch dieser Befehl nicht ausgeführt wird. Wenn Du das "REM" entfernst, wird die Umbenennung tatächlich vorgenommen, soferne es keine Kollisionen mit bereits vorhandenen Dateien gibt.
Grüße
bastla
Grundsätzlich sollte das so gehen, falls Du die letzten 3 Stellen des ursprünglichen Dateinamens verwenden willst:
@echo off & setlocal
for %%i in ("D:\Test\*.pfl") do for /f "tokens=2 delims==" %%a in ('findstr "SelectedPaperName=A" %%i') do call :ProcessFile "%%~fi" %%a
goto :eof
:ProcessFile
set "FName=%~n1"
echo %~1 --^> %2%FName:~-3%%~x1
REM ren %1 "%2%FName:~-3%%~x1"
Grüße
bastla
Oder aber eine kleine Variation:
Mit findstr /M würde ich jeweils die Dateinamen anlisten lassen, die die gesuchte A3/A4-Zeile einhalten.
Und davon nur die, die noch nicht mit A3*/A4* beginnen.
Ist zwar etwas länger, aber auch wartbarer.
Grüße
Biber
@echo off & setlocal
for %%i in ('findstr /M "SelectedPaperName=A3" "D:\test\*.pfl"^|findstr /v "^A3"') do call :ProcessFile "%%~fi" A3
for %%i in ('findstr /M "SelectedPaperName=A4" "D:\test\*.pfl"^|findstr /v "^A4"') do call :ProcessFile "%%~fi" A4
REM --oder ... "for %%a in (A3 A4) do " drumherum und eine der beiden Zeilen darunter...
goto :eof
:ProcessFile
set "FName=%~n1"
echo %~1 --^> %2%FName:~-3%%~x1
REM ren %1 "%2%FName:~-3%%~x1"
Mit findstr /M würde ich jeweils die Dateinamen anlisten lassen, die die gesuchte A3/A4-Zeile einhalten.
Und davon nur die, die noch nicht mit A3*/A4* beginnen.
Ist zwar etwas länger, aber auch wartbarer.
Grüße
Biber
... denn wenn zumindest letzteres nicht zutrifft, könnte es so gehen:
Grüße
bastla
@echo off & setlocal
for %%i in ("D:\Test\*.pfl") do for /f "tokens=2 delims==" %%a in ('findstr "SelectedPaperName=" %%i') do call :ProcessFile "%%~fi" "%%a"
goto :eof
:ProcessFile
set "FName=%~n1"
set DIN=
for %%p in (%~2) do call :ProcessPart %%p
set "NName=%DIN%%FName:~-3%%~x1"
if defined DIN (
if "%~nx1" neq "%NName%" (
echo %~1 --^> %NName%
REM ren %1 "%NName%"
)
)
goto :eof
:ProcessPart
set P=%1
if "%P:~0,1%" neq "A" goto :eof
if not defined DIN set DIN=%1
Grüße
bastla