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
GELÖST

Dateiliste von Ordner mit Grössenangabe

Frage Entwicklung Batch & Shell

Mitglied: weierles

weierles (Level 1) - Jetzt verbinden

13.10.2006, aktualisiert 14.10.2006, 7205 Aufrufe, 13 Kommentare

hallo


ich möchte von mehreren Ordnern eine Seite im internet erstellen mit deren Inhalt. Bis jetzt habe ich dies so gelöst dass über den "dir"-Befehl die Dateiliste des Ordners in eine Excel-tabelle kopiert wurde und am Ende der Batch wurde die tabelle geöffnet; ich hab unter "speichern unter HTML" das ganze gespeichert und geschlossen, die batch hat im Hintergrunde gewartet und anschliessend das ganze per FTP hochgeladen.


Nun möchte ich das ganze ausbauen (und vielleicht auch vereinfachen). Ich wollte für jede Datei die Grösse dazu schreiben, für eine einzelne Daatei habe ich dies so gelöst:


for %%F in ("%dateiname%") do set groesse=%%~zF
set /a groessevor=groesse/1000000
set /a groessenach=groessevor*1000000
set /a groessenach=groesse-groessenach
set /a runden=groessenach/1000
set /a nulltest=groessenach/100000
if %nulltest%==0 set null=0
set /a groessenach=groessenach/10000
set /a runden2=groessenach*10
set /a runden=runden-runden2
if %runden% GTR 5 set /a groessenach=groessenach+1
echo Dateiname: %dateiname% %groessevor%,%null%%groessenach% MB




Nun dachte ich mit einer TXT-Datei die über den "dir"-Befehl erstellt wurde könnte ich den Code oben automatisieren damit er die Variable %dateiname% fortlaufend ändert. Nun aber mein Problem:


dir /b /on >liste.txt

for /f "skip=1 tokens=*" %%i in (liste.txt) do @set dateiname=%%i



bringt mir nicht die Zeile die ich bei skip eingebe, sondern immer die Letzte Zeile. Was ist daran falsch?

Da ja keine 0 dort stehen darf baue ich noch ein Header ein.
Mitglied: geTuemII
13.10.2006 um 13:58 Uhr
Du siehst nur die letzte Zeile der Durchläufe, da du deine Datei liste.txt immer überschreibst.

überschreiben: dir /b /on > liste.txt
anhängen: dir /b /on >> liste.txt

[edit] Da habe ich Lötzinn geschrieben, ich ziehe diesen Beitrag zurück. Wer lesen kann... [/edit]

geTuemII
Bitte warten ..
Mitglied: bastla
13.10.2006 um 13:59 Uhr
Hallo weierles!

Ich würde mal sagen, da die For-Schleife alle (bis auf die erste, wegen skip=1) Zeilen der "liste.txt" durchgeht, wird die Variable "dateiname" immer wieder überschrieben, sodass am Schluss einfach der letzte Name drinnen steht.

Als Lösung könntest Du mit einem do call :Bearbeitung %%i ein passendes Unterprogramm aufrufen, wo der übergebene Dateiname dann einfach als %1 verwendet werden kann.

HTH
bastla
Bitte warten ..
Mitglied: Metzger-MCP
13.10.2006 um 14:13 Uhr
Hm ich bin nun ein bissel verwirrt da ich nicht verstehe welches Problem du hast
oder was genau bei dir nicht funktioniert.

Was möchtest du als Endergebnis haben und wo bekommst du die Daten her ?
Ich könnte dir ja dann eine Datei zur verfügung stellen.

Mit freundlichen Grüßen Metzger
Bitte warten ..
Mitglied: bastla
13.10.2006 um 14:35 Uhr
Hallo!

Ich nehme an, es ist etwa Folgendes gemeint:

01.
@echo off 
02.
for /f %%i in ('dir /b /on /A-d') do call :Auswertung %%i 
03.
goto Ende 
04.
:Auswertung 
05.
for %%F in ("%1") do set groesse=%%~zF 
06.
set /a groessevor=groesse/1000000 
07.
set /a groessenach=groessevor*1000000 
08.
set /a groessenach=groesse-groessenach 
09.
set /a runden=groessenach/1000 
10.
set /a nulltest=groessenach/100000 
11.
if %nulltest%==0 set null=0 
12.
set /a groessenach=groessenach/10000 
13.
set /a runden2=groessenach*10 
14.
set /a runden=runden-runden2 
15.
if %runden% GTR 5 set /a groessenach=groessenach+1 
16.
echo Dateiname: %1 %groessevor%,%null%%groessenach% MB 
17.
:Ende
HTH
bastla
Bitte warten ..
Mitglied: weierles
13.10.2006 um 14:51 Uhr
Was möchtest du als Endergebnis haben
und wo bekommst du die Daten her ?
Ich könnte dir ja dann eine Datei zur
verfügung stellen.

Ich habe als Daten ein paar Dateien in einem Ordner. Als Ergebnis möchte ich eine HTML Seite mit allen Dateinamen (und Ordner) mit den Dateigrössen (Ordner haben 0MB, ist aber egal).
Ich werde die Batch-Ausgabe in ein Excel schreiben und dies als HTML speichern, automatisch gehts bei mir noch nicht.


Die Lösung von bastla ist perfekt, danke!!
Bitte warten ..
Mitglied: bastla
13.10.2006 um 15:07 Uhr
Hallo weierles!

Leider muss ich Dir widersprechen - die Lösung oben ist nur ein Entwurf, der zB bei Dateien mit Leerzeichen im Namen nicht funktioniert.

Hier die verbesserte Version:

01.
@echo off 
02.
chcp 1252 > nul 
03.
for /f "delims=" %%i in ('dir /b /on /A-d') do call :Auswertung "%%i" 
04.
goto Ende 
05.
:Auswertung 
06.
for %%F in (%1) do set groesse=%%~zF 
07.
set /a groessevor=groesse/1000000 
08.
set /a groessenach=groessevor*1000000 
09.
set /a groessenach=groesse-groessenach 
10.
set /a runden=groessenach/1000 
11.
set /a nulltest=groessenach/100000 
12.
if %nulltest%==0 set null=0 
13.
set /a groessenach=groessenach/10000 
14.
set /a runden2=groessenach*10 
15.
set /a runden=runden-runden2 
16.
if %runden% GTR 5 set /a groessenach=groessenach+1 
17.
echo Dateiname: %~1 %groessevor%,%null%%groessenach% MB 
18.
:Ende
bastla

[Edit] Endgültige Fassung (wie weiter unten angemerkt) erstellt. [/Edit]
Bitte warten ..
Mitglied: weierles
13.10.2006 um 15:15 Uhr
Falls Du mit den Anführungszeichen
leben kannst, ist das eine leicht verbesserte
Version:
Ist ok so. Das einzige unschöne sind die Umlaute äöü. Könnte man ans Ende der batch schreiben er soll z.b. alle Ö in ™ umwandeln?
Bitte warten ..
Mitglied: bastla
13.10.2006 um 15:20 Uhr
Hallo weierles!

Ach so, wegen des Excel-Imports ...

Da müsste als 2. Zeile noch ein chcp 1252 > nul hinein.

HTH
bastla
Bitte warten ..
Mitglied: weierles
13.10.2006 um 15:26 Uhr
Da müsste als 2. Zeile noch ein chcp
1252
hinein.
Hat geklappt. Eine Frage noch: ich möchte an den Schluss der Batch noch was schreiben, wenn ich dies nach dem :Ende ganz am Schluss mache wird es jedes mal aufgerufen, merkt der CALL-Befehl nicht das die :Auswertung beim :Ende beendet ist? Oder soll ich meine letzten Worte vor der :Auswertung hinschreiben?
Bitte warten ..
Mitglied: bastla
13.10.2006 um 15:31 Uhr
Hallo weierles!

Richtig - wenn Du ganz am Ende noch etwas ausgeben willst, muss das nach der Schleife (und vor "goto Ende" ) passieren.

Und wegen der Anführungszeichen (doch noch gefunden): In der echo-Zeile statt " ;%1" "%~1" schreiben (ich editier das Ganze nochmal oben).

HTH
bastla
Bitte warten ..
Mitglied: geTuemII
13.10.2006 um 16:17 Uhr
Mal eine Frage: Warum wollt ihr das erst ins Excel importieren?

01.
::main.bat zur Ordnergroessenauswertung 
02.
 
03.
@echo off 
04.
chcp 1252 > nul 
05.
 
06.
echo ^<html^>^<head^>^<title^>Auswertung Datenmengen^<^/titel^>^<^/head^>^<body^>^<table border="1"^> >>auswertung.html 
07.
echo ^<tr^>^<th^>Dateiname^<^/th^>^<th^>Gr&ouml;&szlig;e vorher^<^/th^>^<th^>Gr&ouml;&szlig;e nachher^<^/th^>^<^/tr^> >>auswertung.html 
08.
 
09.
for /f "delims=" %%i in ('dir /b /on /A-d') do call Auswertung.bat "%%i" 
10.
 
11.
echo ^<^/table^>^<^/body^>^<^/html^> >>auswertung.html
01.
:: auswertung.bat zur Ordnergroessenauswertung 
02.
:: wird von main.bat gestartet 
03.
 
04.
@echo off 
05.
chcp 1252 > nul  
06.
 
07.
for %%F in (%1) do set groesse=%%~zF 
08.
set /a groessevor=groesse/1000000 
09.
set /a groessenach=groessevor*1000000 
10.
set /a groessenach=groesse-groessenach 
11.
set /a runden=groessenach/1000 
12.
set /a nulltest=groessenach/100000 
13.
if %nulltest%==0 set null=0 
14.
set /a groessenach=groessenach/10000 
15.
set /a runden2=groessenach*10 
16.
set /a runden=runden-runden2 
17.
if %runden% GTR 5 set /a groessenach=groessenach+1 
18.
 
19.
echo ^<tr^>^<td^>%1^<^/td^>^<td^>%groessevor% MB^<^/td^>^<td^>%null%%groessenach% MB^<^/td^>^<^/tr^> >>auswertung.html
Gruß, geTuemII
Bitte warten ..
Mitglied: weierles
13.10.2006 um 16:49 Uhr
Mal eine Frage: Warum wollt ihr das erst ins
Excel importieren?
Gute Frage nächste Frage.
Ich hatte keine gute lösung gefunden, nun hab ich eine. Eine Lösung die mit 3 Dateien auskommt (main.bat, auswertung.bat und logindaten.ftp) Vielen Dank!

Zudem kann ich jetzt, da ich ja mehrere Laufwerke habe, diese in der main.bat aufführen:

for /f "delims=" %%i in ('dir /b /on /A-d C:\unterordner\') do call Auswertung.bat "%%i"
for /f "delims=" %%i in ('dir /b /on /A-d D:\unterordner\') do call Auswertung.bat "%%i"
for /f "delims=" %%i in ('dir /b /on /A-d E:\unterordner\') do call Auswertung.bat "%%i"
Bitte warten ..
Mitglied: weierles
14.10.2006 um 16:52 Uhr
Ich hab nun das ganze weiter gebaut. Läuft alles automatisch, ich gebe nur ein ob externe Festplatten dran sind oder nicht.
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

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

Ähnliche Inhalte
Exchange Server
gelöst Exchange und Dateisystem - Ordner extern archivieren und zusammenführen (10)

Frage von FA-jka zum Thema Exchange Server ...

Batch & Shell
Ordner erstellen ll Datei hinein kopieren (1)

Frage von heyalice zum Thema Batch & Shell ...

Windows Tools
Ordner Verteilen (12)

Frage von Cloudy zum Thema Windows Tools ...

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 ...