Batch - Dateiname umbenennen, Dateigröße anhängen am Ende des Namens
Hallo,
ich möchte eine oder mehrere Dateien unbennen.
Es soll im Dateinamen, am Ende die Dateigröße eingefügt werden.
Batch - Dateiname umbenennen, Dateigröße anhängen am Ende des Namens
Das soll so aussehen, zum Beispiel.
Originaldatei(en):
C:\TEST\bild.jpg
Neue unbenannte Datei(en):
Variante 1
C:\TEST\bild_2.2MB.jpg
Variante 2
C:\TEST\bild-2.20MB.jpg
Variante 3
C:\TEST\bild.2.20MB.jpg
(KB,MB,GB,TB hätte ich gern als Angabe, die aber Sinnvoll automatisch gewählt wird, je nach dem, wie groß die Datei ist.)
Wenn dies aber zu kommpliziert ist, würde ich mich auch mit einem Tool zufrieden geben.
Vielen Dank im voraus.
Gruß Iceman(chen´)
PS. Gegenstück zm Ordner Batch - Ordnername umbenennen, Ordnergröße anhängen am Ende des Namens
ich möchte eine oder mehrere Dateien unbennen.
Es soll im Dateinamen, am Ende die Dateigröße eingefügt werden.
Batch - Dateiname umbenennen, Dateigröße anhängen am Ende des Namens
Das soll so aussehen, zum Beispiel.
Originaldatei(en):
C:\TEST\bild.jpg
Neue unbenannte Datei(en):
Variante 1
C:\TEST\bild_2.2MB.jpg
Variante 2
C:\TEST\bild-2.20MB.jpg
Variante 3
C:\TEST\bild.2.20MB.jpg
(KB,MB,GB,TB hätte ich gern als Angabe, die aber Sinnvoll automatisch gewählt wird, je nach dem, wie groß die Datei ist.)
Wenn dies aber zu kommpliziert ist, würde ich mich auch mit einem Tool zufrieden geben.
Vielen Dank im voraus.
Gruß Iceman(chen´)
PS. Gegenstück zm Ordner Batch - Ordnername umbenennen, Ordnergröße anhängen am Ende des Namens
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Kommentar vom Moderator Biber am 30.03.2011 um 17:15:01 Uhr
Content-ID: 163616
Url: https://administrator.de/contentid/163616
Ausgedruckt am: 15.11.2024 um 01:11 Uhr
19 Kommentare
Neuester Kommentar
Aloha,
eine oder mehrere, genau da liegt der Hase im Pfeffer - möglich wäre es z.B. per
Wäre also schon gut zu wissen, in welche Richtung man das umsetzen möchte. =)
greetz André
eine oder mehrere, genau da liegt der Hase im Pfeffer - möglich wäre es z.B. per
dir
ein Verzeichnis auszulesen und z:B. alle .jpg zu erfassen und umzubenennen aber man könnte natürlich auch das ganze per drag&drop machen (wo man dann entweder eine oder mehrere Dateien auf die Batch zieht wobei ich momentan die Dateigröße aus dir
beziehen würde ... hm.Wäre also schon gut zu wissen, in welche Richtung man das umsetzen möchte. =)
greetz André
Hallo Iceman und willkommen im Forum!
Das könnte etwa so gehen:
Zum Testen werden (wegen des "
Der Einfachheit halber (und da Du ja auch nicht "KiB" oder "MiB" gewünscht hast) wird mit dem Faktor 1000 umgerechnet.
Zu beachten wäre noch, dass die höchste in der CMD-Shell verrechenbare positive Zahl 2^31-1 ist.
Grüße
bastla
Das könnte etwa so gehen:
@echo off & setlocal
set "Ordner=C:\TEST"
set "Einh=B KB MB GB TB"
pushd "%Ordner%"
for /f "delims=" %%i in ('dir /b /a-d') do call :ProcessFile "%%i"
popd
pause
goto :eof
:ProcessFile
set /a G=%~z1
set /a D=0
set /a N=1
:Loop
if %G% lss 1000 goto :Done
set /a D=G %% 1000
set /a G=G/1000
set /a N+=1
goto :Loop
:Done
for /f "tokens=%N%" %%i in ("%Einh%") do set "E=%%i"
set "NameNeu=%~n1_%G%.%D%%E%%~x1"
echo ren %1 "%NameNeu%"
goto :eof
echo
" vor dem "ren
") die Umbenenn-Befehle vorerst nur angezeigt.Der Einfachheit halber (und da Du ja auch nicht "KiB" oder "MiB" gewünscht hast) wird mit dem Faktor 1000 umgerechnet.
Zu beachten wäre noch, dass die höchste in der CMD-Shell verrechenbare positive Zahl 2^31-1 ist.
Grüße
bastla
Wie wäre es mit xnview?
Der Umbennen-Dialog kann den alten Dateinamen behalten, Datum aus EXIF holen, Dateigrößen dazu schreiben, eigene Texte ergänzen, ....
Beispiel: Bild-###-<Size auto>-<Date Taken [Y-m-d_H-M]>
Die Bildnummer wird dreistelig hochgezählt. Die Größe wir asl Dateiname zugefügt und das Aufnahmedatum wird auf die Minute genau dokumentiert. ICh würde die Reihenfolge umstellen:
<Date Taken [Y-m-d_H-M]>-<Size auto>-<Filename>
Dann fällt die Bildnummerierung weg, die ja nicht eindeutig ist.
Und um den Vorgang zu starten läßt man xnView einfach Verzeichnisübergreifend suchen.
Kleiner Nachteil der Flexibilität: Der Vorgang dauert etwas.
Für Musikdateien kann ich Ant Renamer empfehlen.
Wenn es bei der Musik etwas flexibler sein soll gibt es noch MP3TAG.
viel Erfolg
Der Umbennen-Dialog kann den alten Dateinamen behalten, Datum aus EXIF holen, Dateigrößen dazu schreiben, eigene Texte ergänzen, ....
Beispiel: Bild-###-<Size auto>-<Date Taken [Y-m-d_H-M]>
Die Bildnummer wird dreistelig hochgezählt. Die Größe wir asl Dateiname zugefügt und das Aufnahmedatum wird auf die Minute genau dokumentiert. ICh würde die Reihenfolge umstellen:
<Date Taken [Y-m-d_H-M]>-<Size auto>-<Filename>
Dann fällt die Bildnummerierung weg, die ja nicht eindeutig ist.
Und um den Vorgang zu starten läßt man xnView einfach Verzeichnisübergreifend suchen.
Kleiner Nachteil der Flexibilität: Der Vorgang dauert etwas.
Für Musikdateien kann ich Ant Renamer empfehlen.
Wenn es bei der Musik etwas flexibler sein soll gibt es noch MP3TAG.
viel Erfolg
Aloha bastla!
*mampf* da ist man mal kurz was zum Schnabulieren holen *mampf* und hat gerade seinen Weg angefangen zu gehen *mampf* ... da guckt man kurz hier wieder rein und merkt Ok, hat sich wohl schon erledigt. *mampf*
Egal, ich baue trotzdem mal weiter (hatte momentan zwei Varianten am Entwickeln: Größe per
Grüße, André
edit: Ob ich in diesem Fall noch eine Variante posten werde, weiß ich noch nicht - ein gutes Beispiel dafür, dass ich merke, ich habe noch so viel zu lernen *g*
*mampf* da ist man mal kurz was zum Schnabulieren holen *mampf* und hat gerade seinen Weg angefangen zu gehen *mampf* ... da guckt man kurz hier wieder rein und merkt Ok, hat sich wohl schon erledigt. *mampf*
Egal, ich baue trotzdem mal weiter (hatte momentan zwei Varianten am Entwickeln: Größe per
dir
gleich mitziehen lief nicht wirklich auf Dauer und die letzten zwei Zeilen störten oder per %%~zi), mal gucken, ob ich's auch gebacken apropros *mampf* bekomme ;)Grüße, André
edit: Ob ich in diesem Fall noch eine Variante posten werde, weiß ich noch nicht - ein gutes Beispiel dafür, dass ich merke, ich habe noch so viel zu lernen *g*
Hallo Iceman!
Wenn es nur 2 Dezimalen sein sollen, die Zeile 24 auf
ändern.
Für Dateien mit mehr als 2.147.483.647 Byte Größe ist der Batch so nicht verwendbar (da mit größeren Zahlen nicht gerechnet werden kann) - da Du aber ohnehin die letzten 7 Stellen nicht benötigst, werde ich das nachher per String-Verarbeitung hinbasteln ...
Grüße
bastla
Jetzt die Frage, wie passe ich den Code so an, das immer die jeweilige Größe erkannt wird und dementsprechend im Namen als B, KB ,MB ,GB oder TB angezeigt wird.
Überrascht mich etwas, da ja eigentlich schon enthalten ...Wenn es nur 2 Dezimalen sein sollen, die Zeile 24 auf
set "NameNeu=%~n1_%G%.%D:~0,2%%E%%~x1"
Für Dateien mit mehr als 2.147.483.647 Byte Größe ist der Batch so nicht verwendbar (da mit größeren Zahlen nicht gerechnet werden kann) - da Du aber ohnehin die letzten 7 Stellen nicht benötigst, werde ich das nachher per String-Verarbeitung hinbasteln ...
Grüße
bastla
Aloha bastla, (erneut)
ich habe da wirklich mal eine Funktionsfrage im Ablauf:
Man liest die Dateigröße aus dem Parameter %1 aus, der von %%i gegeben wird, ich blick's einfach nicht wie die batch nacheinander alle Zeilen des dir abklappert und nicht immer denselben ausgibt ...
Ich habe anfangs versucht genau diese Ausgabe per
Das ist eine Situation, wo ich mich schon mehrfach geschlagen geben musste, weil ich nicht wusste, dass ich den Gesamtinhalt einzeln doch so einfach abarbeiten kann.
Grüße, André
ich habe da wirklich mal eine Funktionsfrage im Ablauf:
for /f "delims=" %%i in ('dir /b /a-d') do call :ProcessFile "%%i"
:ProcessFile
set /a G=%~z1
Man liest die Dateigröße aus dem Parameter %1 aus, der von %%i gegeben wird, ich blick's einfach nicht wie die batch nacheinander alle Zeilen des dir abklappert und nicht immer denselben ausgibt ...
Ich habe anfangs versucht genau diese Ausgabe per
%%~zi
zu erhalten per echo geht ja, logischerweise aber da kann ich natürlich dann nicht set /a G=%%~zi
machen klar, nen ganzen Text als Variable definieren wird wohl kaum funktionieren, daher versteh ich in diesem Punkt nicht genau, wie die batch die gegebenen Informationen nun eigentlich einzeln (über %1) abarbeitet (und man diese dadurch in eine Variable G
definieren kann).Das ist eine Situation, wo ich mich schon mehrfach geschlagen geben musste, weil ich nicht wusste, dass ich den Gesamtinhalt einzeln doch so einfach abarbeiten kann.
Grüße, André
Hallo Skyemugen!
Das Unterprogramm (kannst Du wie einen neuen Batch betrachten) wird für jede Datei (entspricht in diesem Fall einem "Objekt", da der Pfad nach dem "
Wolltest Du das ohne Unterprogramm durchführen, müsstest Du für die Verwendung von %G% "delayedExpansion" (und daher !G!) einsetzen ...
Grüße
bastla
Das Unterprogramm (kannst Du wie einen neuen Batch betrachten) wird für jede Datei (entspricht in diesem Fall einem "Objekt", da der Pfad nach dem "
pushd
" ja nicht mehr benötigt wird) aufgerufen; dort kommt die Datei als "%1" an, und Du kannst alle erweiterten Variablen verwenden (also auch "%~z1" für die Größe).Wolltest Du das ohne Unterprogramm durchführen, müsstest Du für die Verwendung von %G% "delayedExpansion" (und daher !G!) einsetzen ...
Grüße
bastla
Aloha bastla!
Ach, so ist das, gut, wieder was dazu gelernt also auch in diesem Fall dann
Hm klar, wenn der durch
Ich danke dir für die Erklärung =) Das wird mir generell beim Bätscheln weiterhelfen.
Grüße, André
Ach, so ist das, gut, wieder was dazu gelernt also auch in diesem Fall dann
delayedexpansion
, verstehe (muss noch bisschen daran arbeiten, wann ich das benötige und wann nicht ohne immer endlos rumzutesten *g*). Ich hatte bei mir eh kein pushd
drin (werde mich wohl nie daran gewöhnen, das mal einzusetzen), sondern hatte wie bei mir üblich den Pfad als %Quelle%
im dir
enthalten.Hm klar, wenn der durch
call
aufgerufene Prozess wie eine neue batch betrachtet werden kann, sieht das natürlich dann schon anders aus.Ich danke dir für die Erklärung =) Das wird mir generell beim Bätscheln weiterhelfen.
Grüße, André
Hallo Iceman!
Mit dem Workaround für mind GB-große Dateien (die Berücksichtigung von TB-Dateigrößen spare ich mal vorläufig ein) sollte es klappen:
Mit dem Workaround für mind GB-große Dateien (die Berücksichtigung von TB-Dateigrößen spare ich mal vorläufig ein) sollte es klappen:
@echo off & setlocal
set "Ordner=C:\TEST"
set "Einh=B KB MB GB"
pushd "%Ordner%"
for /f "delims=" %%i in ('dir /b /a-d') do call :ProcessFile "%%i"
popd
pause
goto :eof
:ProcessFile
set "G=%~z1"
:: bei mehr als 9-stelliger Dateigröße Sonderbehandlung
if "%G:~9%" neq "" goto :GBorMore
set /a D=0
set /a N=1
:Loop
if %G% lss 1000 goto :Done
set /a D=G %% 1000
set /a G=G/1000
set /a N+=1
goto :Loop
:GBorMore
:: zuerst die letzten 6 Stellen abschneiden,
set "G=%G:~0,-6%"
:: dann die letzten 3 Stellen als Dezimalanteil behandeln und
set "D=%G:~-3%
:: den Teil davor als ganzzahligen Anteil festlegen
set "G=%G:~0,-3%
:: sowie die Einheit auf GB setzen
set E=4
:Done
for /f "tokens=%N%" %%i in ("%Einh%") do set "E=%%i"
:: im neuen Namen nur die ersten beiden Stellen des Dezimalanteils verwenden
set "NameNeu=%~n1_%G%.%D:~0,2%%E%%~x1"
echo ren %1 "%NameNeu%"
goto :eof
Hallo Iceman!
Grüße
bastla
Ist das mit diesem Code nun möglich auch große Dateien umzubennen mit der Größenangabe?
Lässt sich doch sicher leicht testen (und wozu wäre sonst der "Workaround für mind GB-große Dateien" gut?) ...Und kann man den Code auch für Ordner umstellen.
Abgesehen davon, dass die Ordnergröße ja eher dynamisch sein wird: Welche Größe ist gemeint (nur Dateien dieses Ordners oder auch der Unterordner)? So oder so lässt sich die Größe eines Ordners nicht per "%~zi" auslesen ...Grüße
bastla
Aloha bastla!
Schade, stimmt, kommt immer
greetz André
Schade, stimmt, kommt immer
0
bei raus aber dann müsste sich eventuell mit der Hilfe des Bibers eine andere Möglichkeit finden lassen ... und als nächstes will er dann die Größe der Laufwerke auslesen *gg*greetz André
Hallo Skyemugen!
Ist ja beides kein Problem (ein
Grüße
bastla
Ist ja beides kein Problem (ein
dir /-c|findstr "Datei(en)"
mit oder ohne "/s
" - und für Optimierer mit "/w
" - genügt ja schon als Basis) - es sollte aber zuerst einmal geklärt sein, was überhaupt die Zielsetzung ist (und der Sinn dahinter wäre auch nicht uninteressant) ...Grüße
bastla