Dateien neu nummerieren anhand des Dateinamens
Hallo Gemeinde,
ich hänge mit meinen wenigen Batchkenntnissen wieder mal an einem Problem fest und bitte euch um Hilfe.
Folgendes Problem: Ich habe jede Menge PDF-Dateien die immer alle gleich lang sind, aber unterschiedlich heißen.
In diesen PDFen steckt eine Nummerierung im Dateinamen. Diese ist dreistellig. Ich möchte die Nummerierung
immer um den Wert zwei reduzieren und da fangen meine Probleme nun an.
Die Dateien sehen im etwa so aus:
Wert.Sorte.20151025.003000.22.00.pdf
Wert.Sorte.20151025.004000.35.00.pdf
Wert.Sorte.20151025.015000.17.00.pdf
Wert.Sorte.20151025.026000.89.00.pdf
Ich möchte nun aus 003 die 001, aus 004 die 002 aus 015 die 013 und aus 026 die 024 machen usw.
Mein Ansatz war jetzt den Dateinamen zu zerlegen und die Nummerierung einer Variable zuzuweisen:
dadurch erhalte ich als Variable die zweistelligen Werte (zweistellig reicht aus) 03, 04, 15 und 26. Diese Variable kann ich nun
neu erzeugen. Das habe ich so gemacht:
So werden die zweistelligen Daten richtig umbenannt, aber anscheinend hat der Batch ein Problem,
mit den Werten 03, 04 etc. zu rechnen. Da zerbröselt es mich immer.
Ein Weitere Ansatz war nun, die Seiten zu sortieren (unter 10 und über 10). Damit komme ich aber
überhaupt nicht klar.
Hat jemand eine Idee wie ich hier weiterkomme?
Danke und Gruß
chainsaw
ich hänge mit meinen wenigen Batchkenntnissen wieder mal an einem Problem fest und bitte euch um Hilfe.
Folgendes Problem: Ich habe jede Menge PDF-Dateien die immer alle gleich lang sind, aber unterschiedlich heißen.
In diesen PDFen steckt eine Nummerierung im Dateinamen. Diese ist dreistellig. Ich möchte die Nummerierung
immer um den Wert zwei reduzieren und da fangen meine Probleme nun an.
Die Dateien sehen im etwa so aus:
Wert.Sorte.20151025.003000.22.00.pdf
Wert.Sorte.20151025.004000.35.00.pdf
Wert.Sorte.20151025.015000.17.00.pdf
Wert.Sorte.20151025.026000.89.00.pdf
Ich möchte nun aus 003 die 001, aus 004 die 002 aus 015 die 013 und aus 026 die 024 machen usw.
Mein Ansatz war jetzt den Dateinamen zu zerlegen und die Nummerierung einer Variable zuzuweisen:
set "Alt=%~n1"
set "T4=%Alt:~21,2%"
dadurch erhalte ich als Variable die zweistelligen Werte (zweistellig reicht aus) 03, 04, 15 und 26. Diese Variable kann ich nun
neu erzeugen. Das habe ich so gemacht:
set counter=%T4%
set /a counter-=2
So werden die zweistelligen Daten richtig umbenannt, aber anscheinend hat der Batch ein Problem,
mit den Werten 03, 04 etc. zu rechnen. Da zerbröselt es mich immer.
Ein Weitere Ansatz war nun, die Seiten zu sortieren (unter 10 und über 10). Damit komme ich aber
überhaupt nicht klar.
Hat jemand eine Idee wie ich hier weiterkomme?
Danke und Gruß
chainsaw
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 286914
Url: https://administrator.de/contentid/286914
Ausgedruckt am: 26.11.2024 um 04:11 Uhr
6 Kommentare
Neuester Kommentar
Powershell-Einzeiler ...
Gruß grexit
gci c:\ordner\*.pdf | rename-item -NewName {$_.Name -replace '^(.*\..*\..*)\.(\d{3})(.*)$',("`$1.$(([int]$_.Basename.Split('.')[3].Substring(0,3) -2).toString().PadLeft(3,'0'))`$3")}
Hallo chainsaw,
Deine Probleme dürften bei Dateien auftauchen, deren Nummer 008XXX, 009XXX, 018XXX, 019XXX, 028XXX, 029XXX, ... lautet. Durch die führenden Nullen werden diese Zahlen vom Batchscript-Interpreter als Oktalzahlen interpretiert, im Oktalsystem existieren die Ziffern 8 und 9 aber nicht.
Du musst also dafür sorgen, dass die führenden Nullen beseitigt werden. Das könnte so gehen:
Die führenden Nullen werden durch die innere
Gruß
Friemler
Deine Probleme dürften bei Dateien auftauchen, deren Nummer 008XXX, 009XXX, 018XXX, 019XXX, 028XXX, 029XXX, ... lautet. Durch die führenden Nullen werden diese Zahlen vom Batchscript-Interpreter als Oktalzahlen interpretiert, im Oktalsystem existieren die Ziffern 8 und 9 aber nicht.
Du musst also dafür sorgen, dass die führenden Nullen beseitigt werden. Das könnte so gehen:
@echo off & setlocal
set "FileName=Wert.Sorte.20151025.008000.22.00.pdf"
call :ChangeFileName "%FileName%"
echo %NewFileName%
exit /b 0
:ChangeFileName
for /f "tokens=1-4* delims=." %%a in ("%~1") do (
for /f "tokens=* delims=0" %%x in ("%%d") do (
call :SetNewFileName "%%a.%%b.%%c." "%%x" ".%%e"
)
)
exit /b 0
:SetNewFileName
set /a Counter=%~2 / 1000 - 2
set "Counter=00%Counter%"
set "Counter=%Counter:~-3%"
set "NewFileName=%~1%Counter%%~3"
exit /b 0
Die führenden Nullen werden durch die innere
FOR
-Schleife im Unterprogramm ChangeFileName
beseitigt und der neue Dateiname im Unterprogramm SetNewFileName
zusammengesetzt.Gruß
Friemler
Hallo chainsaw,
schön, dass Du Dir selbst helfen konntest. Ich dachte es wäre eine Anforderung von Dir, die 3 Nullen verschwinden zu lassen.
Du könntest das Problemchen aber auch anders lösen. Ersetze Zeile 22 durch
und mache Deine o.g. Änderung wieder rückgängig. Das ist doch etwas eleganter, als zuerst die Nullen wegzunehmen (durch die Division mit 1000) und hinterher wieder hinzuzufügen.
Falls an dieser Position mal drei andere Ziffern als 000 stehen würden, blieben diese dann auch erhalten.
Gruß
Friemler
schön, dass Du Dir selbst helfen konntest. Ich dachte es wäre eine Anforderung von Dir, die 3 Nullen verschwinden zu lassen.
Du könntest das Problemchen aber auch anders lösen. Ersetze Zeile 22 durch
set /a Counter=%~2 - 2000
Falls an dieser Position mal drei andere Ziffern als 000 stehen würden, blieben diese dann auch erhalten.
Gruß
Friemler