Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
Kommentar vom Moderator Biber am 30.03.2011 um 17:15:01 Uhr
Zitat von Iceman:
ich möchte eine oder mehrere Dateien unbennen.
set /a rgc+=1
#739

Zitat von MrNetman:
Wie wäre es mit xnview?
Der Umbennen-Dialog kann den alten Dateinamen behalten,
set /a rgc+=1
#740
GELÖST

Batch - Dateiname umbenennen, Dateigröße anhängen am Ende des Namens

Frage Entwicklung Batch & Shell

Mitglied: Iceman

Iceman (Level 1) - Jetzt verbinden

30.03.2011, aktualisiert 18.10.2012, 6218 Aufrufe, 19 Kommentare

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 http://www.administrator.de/index.php?content=163726
Mitglied: Skyemugen
30.03.2011 um 10:38 Uhr
Aloha,

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é
Bitte warten ..
Mitglied: Iceman
30.03.2011 um 10:46 Uhr
Hallo André,

Es geht um mehrere Dateien, meine Bilder- und Musikdateien.

Variante "mehrere" bitte

Gruß Ice
Bitte warten ..
Mitglied: bastla
30.03.2011 um 11:07 Uhr
Hallo Iceman und willkommen im Forum!

Das könnte etwa so gehen:
01.
@echo off & setlocal 
02.
set "Ordner=C:\TEST" 
03.
 
04.
set "Einh=B KB MB GB TB" 
05.
pushd "%Ordner%" 
06.
for /f "delims=" %%i in ('dir /b /a-d') do call :ProcessFile "%%i" 
07.
popd 
08.
pause 
09.
goto :eof 
10.
 
11.
:ProcessFile 
12.
set /a G=%~z1 
13.
set /a D=0 
14.
set /a N=1 
15.
:Loop 
16.
if %G% lss 1000 goto :Done 
17.
set /a D=G %% 1000 
18.
set /a G=G/1000 
19.
set /a N+=1 
20.
goto :Loop 
21.
 
22.
:Done 
23.
for /f "tokens=%N%" %%i in ("%Einh%") do set "E=%%i" 
24.
set "NameNeu=%~n1_%G%.%D%%E%%~x1" 
25.
echo ren %1 "%NameNeu%" 
26.
goto :eof
Zum Testen werden (wegen des "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
Bitte warten ..
Mitglied: MrNetman
30.03.2011 um 11:11 Uhr
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
Bitte warten ..
Mitglied: Skyemugen
30.03.2011 um 11:16 Uhr
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 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*
Bitte warten ..
Mitglied: Iceman
30.03.2011 um 11:18 Uhr
@bastla

hey

Vielen Dank und danke für die nette Begrüßung.
Ich teste das heut Abend und berichte dann.

Gruß Ice

@MrNetman

Hey auch dir danke ich für die Tipps.
Die Tools teste ich doch glatt.

Übrigens, möchte ich das auch für mkv-Dateien nutzen (im Durchschnitt 4.00GB bis 20.00GB groß)
Gruß Ice
Bitte warten ..
Mitglied: Iceman
30.03.2011 um 11:20 Uhr
Hi André (nochmal)

Ja gerne, ich bin auf deine Variante (n) gespannt.

Gruß Ice
and thx
Bitte warten ..
Mitglied: Iceman
30.03.2011 um 11:55 Uhr
Hey bastla,

das funktioniert, wenn ich das echo aus Zeile 25 entferne.
Zwischenfazit: find ich richtig gut und super von dir.

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.
Gut wäre dann auch, wenn diese Angaben, allg auf 2 Stellen hinter dem Komma gekürzt sind. (Wenn das nicht geht, wäre auch ok)

Die automatische angepasste Angabe der Größe wäre schon super, so kann ich diese batch später für Fotos, Musikfiles und Videofiles nutzen.

Gruß Ice
Bitte warten ..
Mitglied: Iceman
30.03.2011 um 13:47 Uhr
Hallo MrNetman,

Hey auch dir danke ich für die Tipps.
Die Tools teste ich doch glatt, wenn ich zu Hause bin.

Übrigens, möchte ich das auch für mkv-Dateien nutzen (im Durchschnitt 4.00GB bis 20.00GB groß)
Gruß Ice
Bitte warten ..
Mitglied: bastla
30.03.2011 um 15:11 Uhr
Hallo Iceman!
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"
ä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
Bitte warten ..
Mitglied: Skyemugen
30.03.2011 um 16:03 Uhr
Aloha bastla, (erneut)

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é
Bitte warten ..
Mitglied: bastla
30.03.2011 um 16:11 Uhr
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 "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
Bitte warten ..
Mitglied: Skyemugen
30.03.2011 um 16:31 Uhr
Aloha bastla!

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é
Bitte warten ..
Mitglied: bastla
30.03.2011 um 16:52 Uhr
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:
01.
@echo off & setlocal 
02.
set "Ordner=C:\TEST" 
03.
 
04.
set "Einh=B KB MB GB" 
05.
pushd "%Ordner%" 
06.
for /f "delims=" %%i in ('dir /b /a-d') do call :ProcessFile "%%i" 
07.
popd 
08.
pause 
09.
goto :eof 
10.
 
11.
:ProcessFile 
12.
set "G=%~z1" 
13.
:: bei mehr als 9-stelliger Dateigröße Sonderbehandlung 
14.
if "%G:~9%" neq "" goto :GBorMore 
15.
set /a D=0 
16.
set /a N=1 
17.
:Loop 
18.
if %G% lss 1000 goto :Done 
19.
set /a D=G %% 1000 
20.
set /a G=G/1000 
21.
set /a N+=1 
22.
goto :Loop 
23.
 
24.
:GBorMore 
25.
:: zuerst die letzten 6 Stellen abschneiden, 
26.
set "G=%G:~0,-6%" 
27.
:: dann die letzten 3 Stellen als Dezimalanteil behandeln und 
28.
set "D=%G:~-3% 
29.
::  den Teil davor als ganzzahligen Anteil festlegen 
30.
set "G=%G:~0,-3% 
31.
:: sowie die Einheit auf GB setzen 
32.
set E=4 
33.
 
34.
:Done 
35.
for /f "tokens=%N%" %%i in ("%Einh%") do set "E=%%i" 
36.
:: im neuen Namen nur die ersten beiden Stellen des Dezimalanteils verwenden 
37.
set "NameNeu=%~n1_%G%.%D:~0,2%%E%%~x1" 
38.
echo ren %1 "%NameNeu%" 
39.
goto :eof
Bitte warten ..
Mitglied: Iceman
31.03.2011 um 10:47 Uhr
Hey bastla, Guten Morgen.

Vielen vielen Dank auch dafür.
Das klappt wunderbar.

Ich ziehe meinen Hut.

Kleine Frage!
Ist das mit diesem Code nun möglich auch große Dateien umzubennen mit der Größenangabe?
Und kann man den Code auch für Ordner umstellen.
Wenn ja, würde ich eine neue Frage starten, bezogen auf Ordner.

Gruß Ice
Bitte warten ..
Mitglied: bastla
31.03.2011 um 11:34 Uhr
Hallo Iceman!
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
Bitte warten ..
Mitglied: Skyemugen
31.03.2011, aktualisiert 18.10.2012
Aloha bastla!

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é
Bitte warten ..
Mitglied: bastla
31.03.2011 um 11:55 Uhr
Hallo Skyemugen!

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
Bitte warten ..
Mitglied: Iceman
31.03.2011, aktualisiert 18.10.2012
Hi bastla und Skyemugen and the Rest vom Schützenfest

ich denke ...Skyemugen , du meinst mich

Also

ich habe hunderte Ordner die so aussehen.

Ordner ALT:
ZHLU00087_BLACK AND WHITE_2008_XCY_ght_0001
IJHK00098_SCHUH BALL FAHRRAD_JHG_kij_0002

Ordner NEU:
ZHLU00087_BLACK AND WHITE_2008_XCY_ght_0001_12.98GB
IJHK00098_SCHUH BALL FAHRRAD_JHG_kij_0002_252.87MB

So hätte ich sofort den Überblick, über die Größe und kann anschließend daraus Dateien (txt´s) anlegen die dann so aussehen.

Datei aus Ordnername:
ZHLU00087_BLACK AND WHITE_2008_XCY_ght_0001_12.98GB.txt
IJHK00098_SCHUH BALL FAHRRAD_JHG_kij_0002_252.87MB.txt

Dann kann ich die txt´s an jemandem Schicken, der vorab weis worum es geht und kann auf dem ersten Blick sehen, wie groß die Ordner bei mir real sind.

Der jenige Antwort dann mit der txt die er haben möchte als Ordner und ich geben den Ordner im Netzwerk (zum Bsp) frei.

Reicht euch die Erklärung?

Grüße Ice

PS. die Größe soll vom kompletten Ordner ausgelesen werden, mit allen Dateien, in allen Ordnern. wichtig!

EDIT: ich habe eine neue Frage dazu erstellt. http://www.administrator.de/forum/batch-ordnername-umbenennen%2c-ordner ...
Bitte führt die Ordnervariante dort weiter. Danke
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Batch & Shell
gelöst Batch: Dateiname abhängig vom Änderungsdatum auslesen (6)

Frage von freaktastisch zum Thema Batch & Shell ...

Batch & Shell
gelöst Dateiname entsprechend einem um x-Ebenen übergeordeten Ordnernamen umbenennen (3)

Frage von Booster07 zum Thema Batch & Shell ...

Batch & Shell
CMD-Batch hilfe: Dateiname zu txt (2)

Frage von Syscore64 zum Thema Batch & Shell ...

Batch & Shell
gelöst 1 PDF duplizieren und umbenennen nach CSV mittels Batch (5)

Frage von Kalisser zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Windows Server
DHCP Server switchen (25)

Frage von M.Marz zum Thema Windows Server ...

SAN, NAS, DAS
gelöst HP-Proliant Microserver Betriebssystem (14)

Frage von Yannosch zum Thema SAN, NAS, DAS ...

Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

Windows 7
Verteillösung für IT-Raum benötigt (12)

Frage von TheM-Man zum Thema Windows 7 ...