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 15.05.2011 um 14:53:01 Uhr
...der das Anhängen und Umbennen erledigt.
set /a rgc+=1
#755
GELÖST

Batchdatei - Dateigrösse formatiert ausgeben

Frage Entwicklung Batch & Shell

Mitglied: Heppy225

Heppy225 (Level 1) - Jetzt verbinden

15.05.2011, aktualisiert 14:53 Uhr, 4005 Aufrufe, 24 Kommentare

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

Mit freundlichen Grüßen
Mitglied: ovu-p86
15.05.2011 um 05:45 Uhr
Hallo Heppy225,

wenn du unter :ProcessFile
01.
set "G=%~z1"
durch
01.
for /F "usebackq tokens=3 delims= " %%a in (`dir /d /c %1^| findstr "Datei(en)"`) do set G=%%a
ersetzt, klappt es.
Kann man wahrscheinlich eleganter machen, aber funktioniert.

Gruß
Uwe
Bitte warten ..
Mitglied: bastla
15.05.2011 um 08:09 Uhr
@ovu-p86
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:
01.
@echo off & setlocal 
02.
set "Ordner=C:\_Backup\Test" 
03.
 
04.
pushd "%Ordner%" 
05.
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" 
06.
popd 
07.
pause
Der Schalter "/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!
Bitte warten ..
Mitglied: Heppy225
15.05.2011 um 09:20 Uhr
Guten Morgen,

vielen Dank für die schnellen und hilfreichen Antworten...funktioniert prima.

zusätzlich zu den umbenannten Dateien erscheinen auch "bytes" und "bytes free" und werden entsprechend konvertiert.

Bevor ich nun das echo aus der Programmzeile nehme, möchte ich aus reiner Vorsicht (da dies nicht gewollt war), lieber eine zusätzliche Abfrage auf die Dateiendung machen
und nur bestimmte Dateiendungen innerhalb des Ordners umbenennen lassen.

Sorry, hätte ich auch früher drauf kommen können...denn das steigert die Flexibilität des Programms erheblich.

Schönes Wochenende...

Mit freundlichen Grüßen
Bitte warten ..
Mitglied: Skyemugen
15.05.2011 um 09:51 Uhr
Aloha,

na dann pack dir doch einfach ein *.typ zum dir dazu, sollte nicht die Schwierigkeit sein und für mehrere spezifische Dateiendungen dann eben *.typ *.typ *.typ etc.

dir /a-d /c *.typ *.typ^|findstr /v "Datei(en) Verzeichnis(se)"
greetz André
Bitte warten ..
Mitglied: Heppy225
15.05.2011 um 10:15 Uhr
Hallo André,

Dank für die Hilfe...die batch selektiert nur noch bestimmte Dateitypen, aber sie versucht immer noch "bytes" und "bytes free" umzubenennen.

Nun die Frage des Unwissenden: egal? oder kann ich verhindern, dass die Systeminfo umbenannt wird?

Bevor ich das nicht weiß, möchte ich das echo nicht entfernen.

Gruß
Bitte warten ..
Mitglied: Skyemugen
15.05.2011 um 10:28 Uhr
Aloha,

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"
... wobei es mich verwundert: Denn mit 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
dann steht (dann sicherlich files und folders oder so) - dann benötigst du eines der beiden 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)
Bitte warten ..
Mitglied: bastla
15.05.2011 um 10:53 Uhr
@Skyemugen
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
Bitte warten ..
Mitglied: Skyemugen
15.05.2011 um 11:11 Uhr
Aloha bastla,

stimmt, naja heute ist Sonntag und Frühstück war zu der Zeit auch noch nicht *gg* - war mir zwar vorher schon aufgefallen aber aus Gewohnheit ...

greetz André
Bitte warten ..
Mitglied: bastla
15.05.2011 um 11:15 Uhr
[OT] @Skyemugen
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]
Bitte warten ..
Mitglied: Heppy225
15.05.2011 um 22:41 Uhr
Guten Abend,

mußte leider zur Arbeit und kann deshalb erst jetzt antworten.

Ja ich habe eine engl. Version und deine Änderung funktioniert prima. Danke.
Ich versuche zwar die nötigen Informationen selbst zu finden, aber als Laie suche ich oft nach den falschen Begriffen oder die Informationen
entsprechen nicht dem Kenntnisstand.

Ich möchte nun noch die Batch Datei so abändern, dass eventuelle Unterordner mitbearbeitet werden. Ich vermute mal, dass ich das durch Änderung des dir Befehls
erreiche; bin aber noch nicht erfolgreich fündig geworden.

Ich möchte mich nochmals für die schnelle und kompetente Unterstützung bedanken.

Mit freundlichen Grüßen
Bitte warten ..
Mitglied: bastla
15.05.2011 um 22:57 Uhr
Hallo Heppy225!

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:
01.
for /f "delims=" %%i in ('dir /s /b /ad "%Ordner%"') do ( 
02.
    pushd "%%i" 
03.
    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" 
04.
    popd 
05.
)
Grüße
bastla

[Edit] "Datei(en)" und "Verzeichnis(se)" durch engl. Version ersetzt [Edit]

[Edit2] Fehlendes "in" in Zeile 1 nachgetragen [/Edit]
Bitte warten ..
Mitglied: Heppy225
15.05.2011 um 23:21 Uhr
Hallo Bastla,

habe dein Konstrukt eingebaut und den dir Befehl wieder um den Parameter /i und bytes erweitert.

Leider popt der Screen nur kurz auf und ich kann das Ergebnis nicht kontrollieren.

Grüße
Heppy
Bitte warten ..
Mitglied: bastla
15.05.2011 um 23:27 Uhr
Hallo Heppy225!

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 ) wäre in diesem Fall dann aber wohl:
01.
@echo off & setlocal 
02.
set "Ordner=C:\_Backup\Test" 
03.
 
04.
for /r "%Ordner%" %%i in (.) do ( 
05.
    pushd "%%i" 
06.
    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" 
07.
    popd 
08.
09.
pause
[/Edit]

Grüße
bastla
Bitte warten ..
Mitglied: Heppy225
15.05.2011 um 23:48 Uhr
Hallo Bastla,

hier nochmal das bisherige Ergebnis:

@echo off & setlocal
set "Ordner=C:\_Backup\Test"
pushd "%Ordner%"

for /f "skip=5 tokens=1-3*" %%a in ('dir /a-d /c *.txt^|findstr /i /v "Datei(en) Verzeichnis(se) bytes"') do (
echo ren "%%d" "%%~nd_%%c%%~xd"
)

for /f "delims=" %%i ('dir /s /b /ad "%Ordner%"') do (
pushd "%%i"
for /f "skip=5 tokens=1-3*" %%a in ('dir /a-d /c *.txt^|findstr /i /v "Datei(en) Verzeichnis(se) bytes"') do echo ren "%%d" "%%~nd_%%c%%~xd"
popd
)
echo.
pause


leider popt der Screen nur. Ich muß wohl einen Fehler eingebaut haben. Danke für deine Geduld und Nachsicht mit einem Anfänger und der hilfreichen Erklärung.

Gruß
Heppy225
Bitte warten ..
Mitglied: bastla
16.05.2011 um 00:00 Uhr
Hallo Heppy!
Ich muß wohl einen Fehler eingebaut haben.
Nö - das "in" nach dem "%%i" hab' schon ich vergessen - ich korrigier's gleich auch oben, obwohl ohnehin die letzte gepostete Version besser sein sollte) ...

Grüße
bastla

P.S.: Bitte verwende zum Posten von Codeschnippseln die passende Formatierung ...
Bitte warten ..
Mitglied: Heppy225
21.05.2011 um 20:33 Uhr
Guten Abend,

leider hatte ich bisher keine Zeit gefunden (Arbeit) die letzte Version zu testen. Sie funktioniert prima. Leider funktioniert sie für meine Bedürfnisse zu gut.
Dies ist aber mein Fehler, da meine Beschreibung meines Vorhabens nicht ordentlich war.

Die letzte Version macht genau das was sie soll, nämlich alle *.7z Dateien umbenennen. In meinem zu bearbeitenden Ordner sind weitere Ordner, die ich packe
(leider sind in diesen Ordner auch *.7z Dateien enthalten, die jetzt mit umbenannt werden).
Ich möchte also nur das Ergebnis (die *.7z files/Dateien) umbenennen.

Mit freundlichen Grüßen
Bitte warten ..
Mitglied: bastla
21.05.2011 um 20:37 Uhr
Hallo Heppy225!

Bitte poste doch nochmal die Batch-Version, welche Du jetzt verwendest ...

Grüße
bastla
Bitte warten ..
Mitglied: Heppy225
21.05.2011 um 20:55 Uhr
Guten Abend bastla,

hier der Code (leider nicht formatiert):

@echo off & setlocal
set "Ordner=C:\_Backup\Test2"

for /r "%Ordner%" %%i in (.) 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

Mit freundlichen Grüßen
Bitte warten ..
Mitglied: bastla
21.05.2011 um 21:03 Uhr
Hallo Heppy225!

Nur die unmittelbaren Unterordner von "C:\_Backup\Test2" zu behandeln sollte so gehen:
01.
@echo off & setlocal 
02.
set "Ordner=C:\_Backup\Test2" 
03.
 
04.
for /d %%i in ("%Ordner%\*.*") do ( 
05.
    pushd "%%i" 
06.
    for /f "skip=5 tokens=1-3*" %%a in ('dir /a-d /c *.7z^|findstr /i/v "File(s) Dir(s) bytes"') do ( 
07.
        echo ren "%%d" "%%~nd_%%c%%~xd" 
08.
09.
    popd 
10.
11.
echo files renamed ... 
12.
pause
Grüße
bastla

P.S.: Die Formatierung (Link siehe oben) bekommst Du sicher auch noch hin ...
Bitte warten ..
Mitglied: Heppy225
21.05.2011 um 22:06 Uhr
Hallo bastla,

entschuldige das ich mich jetzt erst melde, mir ist ein wichtiges Telefonat dazwischen gekommen.

Funktioniert prima...herzlichen Dank für die schnelle Hilfe.

letzte Frage: ich bekomme zweimal die Meldung "FINDSTR: // ignored" und möchte wissen, was es bedeutet?

Mit freundlichen Grüßen
Bitte warten ..
Mitglied: bastla
21.05.2011 um 22:12 Uhr
Hallo Heppy225!

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
Bitte warten ..
Mitglied: Heppy225
21.05.2011 um 22:23 Uhr
Hallo bastla,

die Meldung ist verschwunden, dafür bekomme ich jetzt die Meldungen File not found.

Gruß
Heppy
Bitte warten ..
Mitglied: bastla
21.05.2011 um 22:30 Uhr
Hallo Heppy225!

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 (
oder so
for /f "skip=5 tokens=1-3*" %%a in ('dir /a-d /c *.7z^|findstr /i /v "bytes"') do (
aussehen - soferne es Unterordner gibt, die keine *.7z-Datei enthalten, wäre die Meldung erklärlich und sollte sich durch
for /f "skip=5 tokens=1-3*" %%a in ('dir /a-d /c *.7z 2^>nul^|findstr /i /v "File(s) Dir(s)"') do (
bzw
for /f "skip=5 tokens=1-3*" %%a in ('dir /a-d /c *.7z 2^>nul^|findstr /i /v "bytes"') do (
eliminieren lassen - ansonsten wieder mit "echo on" testen und feststellen, durch welche Zeile die Meldung verursacht wird ...

Grüße
bastla
Bitte warten ..
Mitglied: Heppy225
21.05.2011 um 22:31 Uhr
Hallo bastla,

bevor du dir Gedanken machst....war wieder mein Fehler.

Habe es diesmal nur mit einem Ordner versucht ohne Unterordner...dann kamen die Fehlermeldung.

Funktioniert einwandfrei.

Ich möchte mich nochmals für die unermüdliche Hilfestellung bedanken. Danke bastla!!!

Mein Problem ist gelöst.

ich wünsche eine Gute Nacht.

Mit freundlichen Grüßen Heppy
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

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

Ähnliche Inhalte
Batch & Shell
gelöst Mit Batchdatei Informationen auslesen und diese strukturiert in Excel ausgeben (9)

Frage von Flodsche zum Thema Batch & Shell ...

Batch & Shell
gelöst Batch ausgabe zeilenweise stat spaltenweise ausgeben (4)

Frage von sugram zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Exchange Server
gelöst Exchange 2010 Berechtigungen wiederherstellen (20)

Frage von semperf1delis zum Thema Exchange Server ...

Windows Server
DHCP Server switchen (20)

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

Hardware
gelöst Negative Erfahrungen LAN-Karten (19)

Frage von MegaGiga zum Thema Hardware ...

Exchange Server
DNS Einstellung - zwei feste IPs für Mailserver (15)

Frage von ivan0s zum Thema Exchange Server ...