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

batch liste erstellen

Frage Entwicklung Batch & Shell

Mitglied: maxxer

maxxer (Level 1) - Jetzt verbinden

29.03.2008, aktualisiert 30.03.2008, 6466 Aufrufe, 21 Kommentare

Hi, ich hab schon im ganzen Netz gesucht und nichts gefunden...
Da hier, wie ich finde, die besten Batch - Programmierer sind, bin ich mit meiner Frage hierhergekommen....
Ich habe schon Teile meiner Batch, aber mir fehlt halt noch sehr viel...
Ich möchte den Ordnerinhalt in eine .txt Datei speichern (was nicht gerade schwer ist!)
Nun soll die txt Datei folgendermaßen aussehen:

Dateiname Größe Dateityp

A

B

C

D
Datei 1 2mb txt
Datei 2 10mb pdf

E
Einleitung 15mb html

F
.
.
.


Und so weiter...

also soll der Dateiname unter dem jeweiligen Buchstaben eingetragen werden...
Die Größen und Dateitypen sollten möglichst alle untereinander stehen..

Hoffe sehr, das ihr mir helfen könnt!
Vielen Dank schonmal vorweg!
Mit freundlichen Grüßen maxxer
Mitglied: bastla
29.03.2008 um 16:21 Uhr
Hallo maxxer und willkommen im Forum!

Danke für die Vorschusslorbeeren - schaun mer mal, ob die sich auch verdienen lassen ...

Mit gewissen Einschränkungen sollte folgendes Batch-Gerüst etwa das von Dir gewünschte Ergebnis erzeugen:
01.
@echo off & setlocal 
02.
set "Ordner=%~1" 
03.
if %Ordner:~-1%==\ set "Ordner=%Ordner:~0,-1%" 
04.
for %%i in (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) do ( 
05.
	echo\ 
06.
	echo %%i 
07.
	for /f "delims=" %%a in ('dir /b /on /a-d "%Ordner%\%%i*.*" 2^>nul') do call :ProcessFile "%Ordner%\%%a" 
08.
)	 
09.
goto :eof 
10.
	 
11.
:ProcessFile 
12.
set "DName=%~n1                                        " 
13.
set "DTyp=%~x1" 
14.
set /a "DMB=%~z1/1024/1024" 
15.
set "DGr=      %DMB%" 
16.
echo %DName:~0,40%%DGr:~-6%mb %DTyp:.=% 
17.
goto :eof
Die genannten Einschränkungen betreffen einerseits den Dateinamen (für Sonderzeichen , vor allem "&", im Namen ist derzeit nicht vorgesorgt bzw wäre die spaltengerechte Formatierung etwas aufwändiger; die Spaltenbreite ist außerdem vorweg anzugeben, im Beispiel oben 40 Zeichen), andererseits die Berechnung der Dateigröße in MB - ist eine Datei größer als 2.147.483.647 Byte, kann die Umrechnung in MB nicht mehr (fehlerfrei) vorgenommen werden.

Der oben dargestellte Batch ist zum Aufruf mit Übergabe des aufzulistenden Ordnerpfades gedacht.

Grüße
bastla

P.S.: Besser ginge es mit einem VBScript (welches sich auch in den Batch integrieren ließe).
Bitte warten ..
Mitglied: maxxer
29.03.2008 um 18:52 Uhr
Danke ersteinmal!
Die Einschränkungen sind nicht schlimm, da sie eh nicht vorkommen!

Aber in welcher .txt Datei wird das Ergebnis gespeichert?
Bitte warten ..
Mitglied: bastla
29.03.2008 um 19:00 Uhr
Hallo maxxer!

Da diese Version als Demo gedacht war, erfolgt derzeit nur eine Bildschirmausgabe.

Zum Schreiben in eine Datei einfach am Anfang (nach der ersten "set"-Zeile)
01.
set "Liste=D:\Dateiliste.txt" 
02.
if exist "%Liste%" del "%Liste%"
hinzufügen und die vorletzte Zeile ändern auf
01.
echo %DName:~0,40%%DGr:~-6%mb %DTyp:.=%>>"%Liste%"
Grüße
bastla
Bitte warten ..
Mitglied: maxxer
29.03.2008 um 19:27 Uhr
Iwie wills bei mir net...
Der gesamte Code sieht dann so aus:

@echo off & setlocal
set "Ordner=%~1"
set "Liste=D:\Dateiliste.txt"
if exist "%Liste%" del "%Liste%"
if %Ordner:~-1%==\ set "Ordner=%Ordner:~0,-1%"
for %%i in (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) do (
echo\
echo %%i
for /f "delims=" %%a in ('dir /b /on /a-d "%Ordner%\%%i*.*" 2^>nul') do call :ProcessFile "%Ordner%\%%a"
)
goto :eof

:ProcessFile
set "DName=%~n1 "
set "DTyp=%~x1"
set /a "DMB=%~z1/1024/1024"
set "DGr= %DMB%"
echo %DName:~0,40%%DGr:~-6%mb %DTyp:.=%>>"%Liste%"
goto :eof

Unter D: ist kein Textfile, der Dateiliste heißt...
Hoffe ihr könnte helfen

PS: Sind [] - _ das Sonderzeichen?
Bitte warten ..
Mitglied: bastla
29.03.2008 um 19:51 Uhr
Hallo maxxer!

Bis auf die Tatsache, dass auch die beiden Zeilen
01.
echo\ 
02.
echo %%i
noch eine Umleitung benötigen und daher so aussehen sollten
01.
echo\>>"%Liste%" 
02.
echo %%i>>"%Liste%"
damit auch die einleitenden Buchstaben und die Leerzeilen in die Datei geschrieben werden, gibt es mit dem Erstellen der Listendatei auf D: bei mir kein Problem.

Nur zur Sicherheit: Du hast auch beim Starten den gewünschten Ordner angegeben? Wenn der Batch zB als "MacheListe.cmd" gespeichert ist, wäre er etwa so zu starten:
01.
MacheListe D:\Test
Beim Deinem Code fehlen übrigens diverse Leerzeichen in den Zeilen
01.
set "DName=%~n1 "
und
01.
set "DGr= %DMB%"
Diese Leerzeichen sind für die Ausrichtung der Spalten erforderlich.
Mit "[] - _" sollte es keine Probleme geben.

Grüße
bastla
Bitte warten ..
Mitglied: maxxer
29.03.2008 um 20:06 Uhr
Hi, ich kapier nicht, was du hiermit meinst:
"Nur zur Sicherheit: Du hast auch beim Starten den gewünschten Ordner angegeben? Wenn der Batch zB als "MacheListe.cmd" gespeichert ist, wäre er etwa so zu starten:

MacheListe D:\Test
"
Die Leerzeichen habe ich gelassen, die sind nur durch den Beitrag verloren gegangen...
Also, wenn ich die Btach ausführe, dann stürzt sie nach der Zeile:

if %Ordner:~-1%==\ set "Ordner=%Ordner:~0,-1%"

ab...das hab ich mit dem Befehl "pause" überprüft...
dann ist mir aufgefallen, dass dort "goto :eof" steht, aber es nirgendwo ":eof" steht....
Sry, bin echt Anfänger...
vllt könntest du einfach den kompletten Code posten, danke!

PS: Die besten Batch-Coder hier!!
Bitte warten ..
Mitglied: bastla
29.03.2008 um 20:51 Uhr
Hallo maxxer!

Auch (oder besonders) als Anfänger ist es empfehlenswert, Batchdateien von der Kommandozeile (Start / Ausführen / cmd) zu testen - so kannst Du wesentlich besser nachvollziehen, wie der Batch abläuft und welche Fehlermeldungen ausgegeben werden. Diese Art des Startens hatte ich eigentlich gemeint.

Es gibt aber auch anderen Möglichkeiten: Du kannst Drag & Drop verwenden (also einfach aus dem Explorer einen Ordner auf die Batchdatei ziehen) oder, zumindest zum Testen, den gewünschten Ordner in die Zeile 2 schreiben, also etwa
01.
set "Ordner=D:\Test"
Zum "goto :eof" - damit wird ein Batch (oder ein Unterprogramm, wie ":ProcessFile") beendet ("eof" steht für "end of file" und bedeutet also einen Sprung ans Ende des Batches).
Hier noch einmal der gesamte Batch (mit einer minimalen Änderung):
01.
@echo off & setlocal 
02.
set "Ordner=%~1" 
03.
set "Liste=D:\Dateiliste.txt" 
04.
if exist "%Liste%" del "%Liste%" 
05.
 
06.
if %Ordner:~-1%==\ set "Ordner=%Ordner:~0,-1%" 
07.
for %%i in (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) do ( 
08.
	echo %%i>>"%Liste%" 
09.
	for /f "delims=" %%a in ('dir /b /on /a-d "%Ordner%\%%i*.*" 2^>nul') do call :ProcessFile "%Ordner%\%%a" 
10.
	echo\>>"%Liste%"	 
11.
)	 
12.
goto :eof 
13.
 
14.
:ProcessFile 
15.
set "DName=%~n1                                        " 
16.
set "DTyp=%~x1" 
17.
set /a "DMB=%~z1/1024/1024" 
18.
set "DGr=     %DMB%" 
19.
echo %DName:~0,40%%DGr:~-6%mb %DTyp:.=%>>"%Liste%" 
20.
goto :eof
Grüße
bastla

P.S.: Damit beim Posten keine Leerzeichen verloren gehen, gibt es hier <code>-Tags ...
Bitte warten ..
Mitglied: maxxer
29.03.2008 um 21:17 Uhr
Bei mir läuft die Batch einfach nicht! -.-
Ich habe ans Ende ne Pause gesetzt, um zu testen, ob die Batch überhaupt bis dahin kommt...
Aber das Fenster schließt sich vorher!

Edit: Hab hier mal die Fehlerzeile und die Fehlermeldung!

if %Ordner:~-1%==\ set "Ordner=%Ordner:~0,-1%"


"-1"" ist syntaktisch an dieser Stelle nicht verarbeitbar.

@bastla: Benutzt du einen Instant-Messenger?
Bitte warten ..
Mitglied: bastla
29.03.2008 um 21:34 Uhr
Hallo maxxer!

Für die von Dir beschriebene Fehlermeldung gibt es nur eine Erklärung: Die Variable %Ordner% hat keinen Inhalt, weil Du keinen Ordner angegeben/übergeben hast.

Magst Du es daher nochmals mit einer der beschriebenen Methoden "Kommandozeile", "Drag & Drop" oder Eintragen des gewünschten Pfades direkt in den Batch versuchen?

Grüße
bastla
Bitte warten ..
Mitglied: maxxer
29.03.2008 um 21:41 Uhr
Ahh du bist der Beste!!
Das mit dem Drag&Drop klappt prima...das andere kapier ich net (bin zu dumm)
Nur kann man den Abstand zwischen der Dateigröße und dem Dateitypen etwas größer sein?
Bitte warten ..
Mitglied: bastla
29.03.2008 um 21:57 Uhr
Hallo maxxer!

Nur kann man den Abstand zwischen der Dateigröße und dem Dateitypen etwas größer sein?
Um vielleicht Deine zukünftige Batcher-Karriere etwas zu fördern, eine etwas genauere Erklärung der folgenden Zeile (dann kannst Du die Ausgabe leicht anpassen):
01.
echo %DName:~0,40%%DGr:~-6%mb %DTyp:.=%>>"%Liste%"
In %DName% stehen der Dateiname und eine Menge Leerzeichen - die ersten 40 Stellen davon werden ausgegeben (das wäre also der Teil "%DName:~0,40%").

%DGr% enthält einige Leerzeichen und danach die Dateigröße als Zahl - hier werden die letzten 6 Stellen (wegen -6) ausgegeben (für eine Datei mit 12 MB also zB 4 Leerzeichen und die Zahl 12 - das macht der Teil "%DGr:~-6%").

Dahinter folgt der fixe Text "mb" und ein Leerzeichen, und dann noch der Dateityp (%DTyp%, Inhalt zb ".txt"), von dem wir allerdings den Punkt nicht wollen und diesen daher durch Nichts (steht zwischen dem "=" und dem "%" ) ersetzen (%DTyp:.=%).

Wenn Du also zwischen der Dateigröße und dem Typ mehr als nur ein Leerzeichen willst, schaffst Du das (bin ich mir sicher) jetzt auch selbst ...

Ach ja, damit die so erstellte Zeile an die Dateiliste angefügt wird, kommt dann noch: >>"%Liste%"

Grüße
bastla
Bitte warten ..
Mitglied: maxxer
29.03.2008 um 22:22 Uhr
Vorab ersteinmal: Tausend Dank! Ein so kompetente Hilfe hatte ich schon lange nicht mehr!
Respekt!

Hab ich nach ein bisschen probieren dann auch hinbekommen!

Eine wirklich allerletzte Frage:
Es gibt nun auch Dateien, die mit Zahlen beginnen...
könnten eine Katergorie 0-9 noch vor dem Buchstaben A angelegt werden?
Wäre wirklich sehr dankbar...

Werde das Forum hier auch weiterempfehlen!!!
Bitte warten ..
Mitglied: bastla
29.03.2008 um 22:29 Uhr
Hallo maxxer!

Freut mich wenn's geholfen hat ...

Die Ergänzung um Ziffern oder zB auch Sonderzeichen kannst Du in der Zeile
01.
for %%i in (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) do (
vornehmen - dabei ist nur zu beachten, dass jeweils ein Leerzeichen als Trennzeichen gesetzt werden muss.

Grüße
bastla
Bitte warten ..
Mitglied: maxxer
29.03.2008 um 22:36 Uhr
Soweit war ich dann doch schon :D:D
Aber wenn ich folgendes schreib,

for %%i in (1 2 3 4 5 6 7 8 9 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) do (

dann listet er jede Zahl einzeln...
Ich möchte aber gerne eine Kategorie die 1-9 heißt, in die alle Zahlen hinein getragen werden..
Bitte warten ..
Mitglied: bastla
29.03.2008 um 22:54 Uhr
Hallo maxxer!

Ich möchte aber gerne eine Kategorie die 1-9 heißt, in die alle Zahlen hinein getragen werden..
Ich biete Dir sogar 0-9 ...

Dazu den folgenden Block nach der Zeile "if %Ordner..." einfügen:
01.
echo 0-9>>"%Liste%" 
02.
for %%i in (0 1 2 3 4 5 6 7 8 9) do ( 
03.
	for /f "delims=" %%a in ('dir /b /on /a-d "%Ordner%\%%i*.*" 2^>nul') do call :ProcessFile "%Ordner%\%%a" 
04.
)	 
05.
echo\>>"%Liste%"
Grüße
bastla
Bitte warten ..
Mitglied: maxxer
29.03.2008 um 23:16 Uhr
Du hast es einfach drauf!
Wieso gibt es NICHT nur solche hilfsbereiten User mit einem so ernormen Wissen und Können^^?

Eine, letzte Frage...
Was müsste ich verändern, damit Dateien aus Unterordnern mit aufgelistet werden?
Bitte warten ..
Mitglied: bastla
30.03.2008 um 10:15 Uhr
Hallo maxxer!

Was müsste ich verändern, damit Dateien aus Unterordnern mit aufgelistet werden?
Eigentlich nur jeweils "dir /s /b ..." schreiben - allerdings werden dann die kompletten Pfade ausgegeben ...

Grüße
bastla
Bitte warten ..
Mitglied: maxxer
30.03.2008 um 14:45 Uhr
Geht es auch, dass der Pfad nicht angezeigt wird?
Bitte warten ..
Mitglied: bastla
30.03.2008 um 16:53 Uhr
Hallo maxxer!

Wenn tatsächlich nur der Dateiname (ohne Hinweis darauf, in welchem Unterordner sich die Datei befindet) ausgegeben werden soll, dann etwa so:
01.
@echo off & setlocal 
02.
set "Ordner=%~1" 
03.
set "Liste=D:\Dateiliste.txt" 
04.
 
05.
if exist "%Liste%" del "%Liste%" 
06.
if %Ordner:~-1%==\ set "Ordner=%Ordner:~0,-1%" 
07.
 
08.
echo 0-9>>"%Liste%" 
09.
for %%i in (0 1 2 3 4 5 6 7 8 9) do ( 
10.
	for /f "delims=" %%a in ('dir /s /b /on /a-d "%Ordner%\%%i*.*" 2^>nul') do call :ProcessFile "%%a" 
11.
)	 
12.
echo\>>"%Liste%" 
13.
 
14.
for %%i in (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) do ( 
15.
	echo %%i>>"%Liste%" 
16.
	for /f "delims=" %%a in ('dir /s /b /on /a-d "%Ordner%\%%i*.*" 2^>nul') do call :ProcessFile "%%a" 
17.
	echo\>>"%Liste%"	 
18.
)	 
19.
goto :eof 
20.
 
21.
:ProcessFile 
22.
set "DName=%~n1                                        " 
23.
set "DTyp=%~x1" 
24.
set /a "DMB=%~z1/1024/1024" 
25.
set "DGr=     %DMB%" 
26.
echo %DName:~0,40%%DGr:~-6%mb   %DTyp:.=%>>"%Liste%" 
27.
goto :eof
Die Sortierung innerhalb eines Buchstabens funktioniert nur auf Ordnerebene - es werden daher zB zunächst alle mit A beginnenden Dateien des übergebenen Ordners sortiert ausgegeben, danach jene des ersten Unterordners (bezogen auf den Unterordner sortiert), dann die des nächsten Unterordners and so on ...

Grüße
bastla
Bitte warten ..
Mitglied: maxxer
30.03.2008 um 22:24 Uhr
Hi, danke läuft alles prima...
nun eine komplett andere Frage:
Ich möchte alle .rar - Archive aus einem Ordner entpacken und wenn das entpacken erfolgreich ist, sollen die Archive gelöscht werden.
Wenn das entpacken nicht erfolgreich war, sollen die Archive nicht gelöscht werden....
Also z.b:
Datei.part1.rar + Datei.part2.rar + Datei.part3.rar --> Datei.txt
Wenn das entpacken erfolgreich ist, dann werden Die Parts "Datei.part1.rar", "Datei.part2.rar" und "Datei.part3.rar" gelöscht, wenn nicht, dann nicht!
Und das soll für alle Archive eines Ordner gemacht werden!

Danke jetzt schonmal!!
Bitte warten ..
Mitglied: bastla
30.03.2008 um 22:42 Uhr
Hallo maxxer!

... eine komplett andere Frage ...
... sollte in einem komplett anderen Thread stehen.

Grüße
bastla
Bitte warten ..
Neuester Wissensbeitrag
CPU, RAM, Mainboards

Angetestet: PC Engines APU 3a2 im Rack-Gehäuse

(1)

Erfahrungsbericht von ashnod zum Thema CPU, RAM, Mainboards ...

Ähnliche Inhalte
Batch & Shell
"Generic" Drucker mit batch - File erstellen (6)

Frage von MrPreesident zum Thema Batch & Shell ...

Batch & Shell
gelöst Batch Ordner erstellen und verschieben (6)

Frage von Fromeonly zum Thema Batch & Shell ...

Batch & Shell
Batch: .rar-Pakete automatisch Ordner erstellen und verschieben (2)

Frage von BowserMD zum Thema Batch & Shell ...

Batch & Shell
Dateisuche per Batch anhand einer Liste (8)

Frage von Eldebs zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
DSL, VDSL
DSL-Signal bewerten (13)

Frage von SarekHL zum Thema DSL, VDSL ...

Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (9)

Frage von JayyyH zum Thema Switche und Hubs ...

Backup
Clients als Server missbrauchen? (9)

Frage von 1410640014 zum Thema Backup ...

Windows Server
Mailserver auf Windows Server 2012 (9)

Frage von StefanT81 zum Thema Windows Server ...