Batchdatei - Dateigrösse formatiert ausgeben
Hallo erstmal,
bin zum ersten Mal im Forum und bin begeistert was ich hier alles finden und lernen kann.
Zur Sache: ein Problem mit einer kleinen Batch-Datei unter WinXP.
Ich brauche eine Batch Datei, die mir die formatierte (1000 Punkte) Dateigröße an den Dateinamen anhängt.
Ich habe einen Code gefunden (Dank an bastla) der das Anhängen und Umbennen erledigt.
Leider finde ich keine Information über das Wie unterschiedliche Dateigrößen zu formatieren (123456789 ->123.456.789)
Hier das bisherige Ergebnis:
@echo off & setlocal
set "Ordner=C:\_Backup\Test"
pushd "%Ordner%"
for /f "delims=" %%i in ('dir /b /a-d') do call :ProcessFile "%%i"
popd
pause
goto :eof
:ProcessFile
set "G=%~z1"
set "NameNew=%~n1_%G%%~x1"
echo ren %1 "%NameNew%"
goto :eof
Bin für jeden Tip dankbar
Vielen Dank im Voraus
MfG
bin zum ersten Mal im Forum und bin begeistert was ich hier alles finden und lernen kann.
Zur Sache: ein Problem mit einer kleinen Batch-Datei unter WinXP.
Ich brauche eine Batch Datei, die mir die formatierte (1000 Punkte) Dateigröße an den Dateinamen anhängt.
Ich habe einen Code gefunden (Dank an bastla) der das Anhängen und Umbennen erledigt.
Leider finde ich keine Information über das Wie unterschiedliche Dateigrößen zu formatieren (123456789 ->123.456.789)
Hier das bisherige Ergebnis:
@echo off & setlocal
set "Ordner=C:\_Backup\Test"
pushd "%Ordner%"
for /f "delims=" %%i in ('dir /b /a-d') do call :ProcessFile "%%i"
popd
pause
goto :eof
:ProcessFile
set "G=%~z1"
set "NameNew=%~n1_%G%%~x1"
echo ren %1 "%NameNew%"
goto :eof
Bin für jeden Tip dankbar
Vielen Dank im Voraus
MfG
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Kommentar vom Moderator Biber am 15.05.2011 um 14:53:01 Uhr
...der das Anhängen und Umbennen erledigt.
set /a rgc+=1#755
Content-ID: 166270
Url: https://administrator.de/forum/batchdatei-dateigroesse-formatiert-ausgeben-166270.html
Ausgedruckt am: 17.05.2025 um 18:05 Uhr
24 Kommentare
Neuester Kommentar
@ovu-p86
Der Schalter "
Anmerkungen zu Deiner "
Grüße
bastla
P.S.: Bevor ich's vergesse:
Willkommen, Heppy225, im Forum!
Kann man wahrscheinlich eleganter machen
Eher effiizienter (wäre schon bei der "Originalversion" oben möglich und sinnvoll gewesen) - anstelle eines zusätzlichen "dir
" für jede einzelne Datei gleich:@echo off & setlocal
set "Ordner=C:\_Backup\Test"
pushd "%Ordner%"
for /f "skip=5 tokens=1-3*" %%a in ('dir /a-d /c^|findstr /v "Datei(en) Verzeichnis(se)"') do echo ren "%%d" "%%~nd_%%c%%~xd"
popd
pause
/c
" beim "dir
" sollte eigentlich nicht nötig sein (Default), schadet aber auch nicht ...Anmerkungen zu Deiner "
for /f
"-Schleife: "usebackq
" verwende ich eigentlich nur, wenn ich einen Dateinamen unter Anführungszeichen angeben will (für Befehle genügen Apostrophe), und Leerzeichen und TAB sind Default-"Delimiter" ...Grüße
bastla
P.S.: Bevor ich's vergesse:
Willkommen, Heppy225, im Forum!
Aloha,
ach, das hatte ich überlesen, nun, ganz einfach:
Wie im Code bereits ersichtlich, ist
... wobei es mich verwundert: Denn mit
Wenn dem so ist, schau doch einfach, was bei dir statt dieser Kriterien in der Ausgabe
dann steht (dann sicherlich files und folders oder so) - dann benötigst du eines der beiden
greetz André
P.S.:
)
edit: einmal Überfluss entfernt, siehe technischen Hinweis von bastla ^_^ aber dafür
ach, das hatte ich überlesen, nun, ganz einfach:
Wie im Code bereits ersichtlich, ist
findstr /v
deine Lösung, also hängst du das ganz einfach noch einmal an: (einmal bytes reicht ja, ist ja in beiden enthalten)dir /a-d /c *.typ *.typ^|findstr /i /v "Datei(en) Verzeichnis(se) bytes"
findstr /v "Datei(en) Verzeichnis(se)"
sollte das ausgeschlossen sein ... ach du hast eine englische Version kann das sein?Wenn dem so ist, schau doch einfach, was bei dir statt dieser Kriterien in der Ausgabe
2 Datei(en), 1.572.864 Bytes
0 Verzeichnis(se), 40.405.688.320 Bytes frei
findstr /v
nicht mehr, sondern lässt entweder das bytes (womit auch alle Dateien betroffen wären, die bytes im Namen haben) oder änderst das deutsche Datei(en) ins bei dir wohl vorhandene englisch file(s) [nehme ich an] und Verzeichnis(se) in folder(s) [schätze ich mal] um.greetz André
P.S.:
Bevor ich das nicht weiß, möchte ich das echo nicht entfernen.
Eine sehr kluge Einstellung =) (wobei da nicht viel passieren würde, vllt. eine Fehlermeldung, dass die Datei nicht vorhanden ist edit: einmal Überfluss entfernt, siehe technischen Hinweis von bastla ^_^ aber dafür
Schalter /i
hinzugefügt, you never know (deutsche Version: Bytes - englische Version: bytes)
@Skyemugen

Technische Anmerkung: Du hättest für "bytes" kein weiteres "
Grüße
bastla
ach du hast eine englische Version kann das sein?
Das wäre auch meine Schlussfolgerung gewesen ... Technische Anmerkung: Du hättest für "bytes" kein weiteres "
findstr
" benötigt (ohne "/c:
" können - durch Leerzeichen getrennt - mehrere Suchbegriffe angegeben werden) ...Grüße
bastla
[OT] @Skyemugen

Grüße
bastla
[/OT]
und Frühstück war zu der Zeit auch noch nicht *gg*
Ist ja wohl das Mindeste, was man/frau von einem Sonntag erwarten kann ... Grüße
bastla
[/OT]
Hallo Heppy225!
Hinsichtlich der Berücksichtigung der Unterordner wird ein zusätzliches "
Grüße
bastla
[Edit] "Datei(en)" und "Verzeichnis(se)" durch engl. Version ersetzt [Edit]
[Edit2] Fehlendes "
Hinsichtlich der Berücksichtigung der Unterordner wird ein zusätzliches "
/s
" beim "dir
"-Befehl nicht genügen - Du brauchst "außenrum" eine weitere Schleife - etwa:for /f "delims=" %%i in ('dir /s /b /ad "%Ordner%"') do (
pushd "%%i"
for /f "skip=5 tokens=1-3*" %%a in ('dir /a-d /c^|findstr /v "File(s) Dir(s)"') do echo ren "%%d" "%%~nd_%%c%%~xd"
popd
)
bastla
[Edit] "Datei(en)" und "Verzeichnis(se)" durch engl. Version ersetzt [Edit]
[Edit2] Fehlendes "
in
" in Zeile 1 nachgetragen [/Edit]
Hallo Heppy225!
Abgesehen davon, dass ein Batch ohnehin (zum Testen) aus einem CMD-Fenster gestartet werden sollte, kannst Du weiterhin mit "
Was ich nicht deutlich gemacht hatte: Die neuen Zeilen sind als Ergänzung des bisherigen Batches unmittelbar vor der letzten Zeile (eben "
[Edit] Eleganter (aber ungetestet
) wäre in diesem Fall dann aber wohl:
[/Edit]
Grüße
bastla
Abgesehen davon, dass ein Batch ohnehin (zum Testen) aus einem CMD-Fenster gestartet werden sollte, kannst Du weiterhin mit "
pause
" als letzter Zeile in Ruhe die Ausgabe kontrollieren ...Was ich nicht deutlich gemacht hatte: Die neuen Zeilen sind als Ergänzung des bisherigen Batches unmittelbar vor der letzten Zeile (eben "
pause
") einzufügen (da ansonsten der Startordner selbst nicht bearbeitet würde).[Edit] Eleganter (aber ungetestet
@echo off & setlocal
set "Ordner=C:\_Backup\Test"
for /r "%Ordner%" %%i in (.) do (
pushd "%%i"
for /f "skip=5 tokens=1-3*" %%a in ('dir /a-d /c^|findstr /v "File(s) Dir(s)"') do echo ren "%%d" "%%~nd_%%c%%~xd"
popd
)
pause
Grüße
bastla
Hallo Heppy225!
Nur die unmittelbaren Unterordner von "C:\_Backup\Test2" zu behandeln sollte so gehen:
Grüße
bastla
P.S.: Die Formatierung (Link siehe oben) bekommst Du sicher auch noch hin ...
Nur die unmittelbaren Unterordner von "C:\_Backup\Test2" zu behandeln sollte so gehen:
@echo off & setlocal
set "Ordner=C:\_Backup\Test2"
for /d %%i in ("%Ordner%\*.*") do (
pushd "%%i"
for /f "skip=5 tokens=1-3*" %%a in ('dir /a-d /c *.7z^|findstr /i/v "File(s) Dir(s) bytes"') do (
echo ren "%%d" "%%~nd_%%c%%~xd"
)
popd
)
echo files renamed ...
pause
bastla
P.S.: Die Formatierung (Link siehe oben) bekommst Du sicher auch noch hin ...
Hallo Heppy225!
Erhältst Du die Meldung auch noch, wenn Du das Leerzeichen zwischen "
Grüße
bastla
Erhältst Du die Meldung auch noch, wenn Du das Leerzeichen zwischen "
/i
" und "/v
" wieder einfügst (ich hatte das oben von Dir so koipiert)? BTW: Nach "bytes" solltest Du nicht suchen müssen (oder Du sparst alternativ "Dir(s)" und "File(s)" ein und hast eine Version, die auch mit einem deutschen Windows funktioniert - solange in keinem Dateinamen "bytes" vorkommt) ...Grüße
bastla
Hallo Heppy225!
Die entsprechende Zeile sollte jetzt so
oder so
aussehen - soferne es Unterordner gibt, die keine *.7z-Datei enthalten, wäre die Meldung erklärlich und sollte sich durch
bzw
eliminieren lassen - ansonsten wieder mit "
Grüße
bastla
Die entsprechende Zeile sollte jetzt so
for /f "skip=5 tokens=1-3*" %%a in ('dir /a-d /c *.7z^|findstr /i /v "File(s) Dir(s)"') do (
for /f "skip=5 tokens=1-3*" %%a in ('dir /a-d /c *.7z^|findstr /i /v "bytes"') do (
for /f "skip=5 tokens=1-3*" %%a in ('dir /a-d /c *.7z 2^>nul^|findstr /i /v "File(s) Dir(s)"') do (
for /f "skip=5 tokens=1-3*" %%a in ('dir /a-d /c *.7z 2^>nul^|findstr /i /v "bytes"') do (
echo on
" testen und feststellen, durch welche Zeile die Meldung verursacht wird ...Grüße
bastla