Supportnet / Forum / WindowsXP
CMD mit DIR Zahlen richtig sortieren
Frage
Hallo,
ich möchte mit der CMD-Konsole (Win-XP) die Ausgabe von DIR in Numerischer Reihenfolge ausgeben:
Es existieren die Verzeichnisse "BV 15" "BV 89" und "BV 122"
DIR gibt die Liste der Verzeichnisse folgendermaßen aus:
<DIR> "BV 122"
<DIR> "BV 15"
<DIR> "BV 89"
wünschenswert wäre folgendes Ergebniss:
<DIR> "BV 15"
<DIR> "BV 89"
<DIR> "BV 122"
Vielen Dank für eure Antworten...
MFG bassix
Antwort 1 von Seymour
Hallo,
Die Ausgabe ist nur in alphabetischer Reihenfolge, oder umgekehrt möglich.Umgehen kann man das Problem indem führende Nullen in den Verzeichisnamen eingefügt werden, sofern das möglich ist. Dann funktioniert die Ausgabe in der richtigen Reihenfolge.
<DIR> "BV 015"
<DIR> "BV 089"
<DIR> "BV 122"
Gruß Seymour
Zitat:
wünschenswert wäre folgendes Ergebniss:
<DIR> "BV 15"
<DIR> "BV 89"
<DIR> "BV 122"
wünschenswert wäre folgendes Ergebniss:
<DIR> "BV 15"
<DIR> "BV 89"
<DIR> "BV 122"
Die Ausgabe ist nur in alphabetischer Reihenfolge, oder umgekehrt möglich.Umgehen kann man das Problem indem führende Nullen in den Verzeichisnamen eingefügt werden, sofern das möglich ist. Dann funktioniert die Ausgabe in der richtigen Reihenfolge.
<DIR> "BV 015"
<DIR> "BV 089"
<DIR> "BV 122"
Gruß Seymour
Antwort 2 von BASSIX
Hallo Seymour,
danke für deinen Tip, bei vorgesetzte Nullen würde mein Problem nicht auftreten, jedoch sind die Verzeichnissnahmen fix.
Kann man nicht mit DIR | SORT etwas erreichen ?
danke für deinen Tip, bei vorgesetzte Nullen würde mein Problem nicht auftreten, jedoch sind die Verzeichnissnahmen fix.
Kann man nicht mit DIR | SORT etwas erreichen ?
Antwort 3 von Seymour
help sort
Ich denke nein, aber ich beschäftige mich seit Einführung des WSH kaum noch mit der CMD-Konsole. Möglicherweise gibts da doch noch eine Möglichkeit der Sortierung. Muss das unbedingt mit DIR in der CMD-Konsole erfolgen?
Gruß Seymour
Ich denke nein, aber ich beschäftige mich seit Einführung des WSH kaum noch mit der CMD-Konsole. Möglicherweise gibts da doch noch eine Möglichkeit der Sortierung. Muss das unbedingt mit DIR in der CMD-Konsole erfolgen?
Gruß Seymour
Antwort 4 von batti-batch
Hallo BASSIX ,
es ist wirklich sehr ärgerlich, das weder der DIR- noch der SORT-Befehl die Ausgabe in der von Dir gewünschten Form ermöglichen.
Einen möglichen Ausweg bietet ein Batchprogramm, welches zweiteilige Verzeichnisnamen sortiert.
Jetzt erfolgt die Ausgabe in der Form
Grenzen des Programms:
(1) es müssen zweiteilige Verzeichnisnamen sein
(2) Zahl im zweiten Namensteil max. 9999
(3) Zahl im zweiten Namensteil sollte größer 0 sein
Die zweite Grenze ließe sich sehr leicht nach oben verschieben.
Es wäre denkbar, dieses Beispiel noch weiter auszubauen.
Notwendige Anpassungen der Namen und Verzeichnisse kannst Du ganz einfach im SET-Block vornehmen:
Hier nun das vollständige Programm:
Viel Spaß beim Testen.
Herzliche Grüße
batti-batch
es ist wirklich sehr ärgerlich, das weder der DIR- noch der SORT-Befehl die Ausgabe in der von Dir gewünschten Form ermöglichen.
Einen möglichen Ausweg bietet ein Batchprogramm, welches zweiteilige Verzeichnisnamen sortiert.
Jetzt erfolgt die Ausgabe in der Form
BV 15
BV 89
BV 122
usw.Grenzen des Programms:
(1) es müssen zweiteilige Verzeichnisnamen sein
(2) Zahl im zweiten Namensteil max. 9999
(3) Zahl im zweiten Namensteil sollte größer 0 sein
Die zweite Grenze ließe sich sehr leicht nach oben verschieben.
Es wäre denkbar, dieses Beispiel noch weiter auszubauen.
Notwendige Anpassungen der Namen und Verzeichnisse kannst Du ganz einfach im SET-Block vornehmen:
SET "datei=Name und Pfad der ersten Temp-Datei"
SET "sort_ausgabe=Name und Pfad der zweiten Temp-Datei"
SET "quell_verzeichnis=Name und Pfad des Quell-Verzeichnissses"
Hier nun das vollständige Programm:
@ECHO off
SETLOCAL enabledelayedexpansion
REM
REM Testprogramm
REM Sortierte Ausgabe
REM zweiteiliger Verzeichnisnamen
REM
REM Numerische Sortierung
REM
REM https://supportnet.de/threads/1647010
REM
REM (c) batti-batch
REM Batch erstellt am 10.12.2007
REM
REM Programm gestestet unter Windows 2000
REM
SET "datei=Name und Pfad der ersten Temp-Datei"
SET "sort_ausgabe=Name und Pfad der zweiten Temp-Datei"
SET "quell_verzeichnis=Name und Pfad des Quell_Verzeichnissses"
REM Temporaere Dateien entfernen, falls (noch) vorhanden
IF EXIST "%datei%" DEL /f "%datei%" 1>NUL 2>NUL
IF EXIST "%sort_ausgabe%" DEL /f "%sort_ausgabe%" 1>NUL 2>NUL
FOR /f "tokens=1-5 delims= " %%i IN ('DIR "%quell_verzeichnis%" /ad') DO (
IF [%%k] EQU [^<DIR^>] IF [%%m] NEQ [] (
SET /a zahl=%%m
REM Fuehrende Nullen zur Sortierung einfuegen
IF !zahl! LEQ 9 ECHO %%l 000!zahl! >> %datei%
IF !zahl! GTR 9 IF !zahl! LEQ 99 ECHO %%l 00!zahl!>> %datei%
IF !zahl! GTR 99 IF !zahl! LEQ 999 ECHO %%l 0!zahl!>> %datei%
IF !zahl! GTR 999 IF !zahl! LEQ 9999 ECHO %%l !zahl!>> %datei%
IF !zahl! GTR 9999 (ECHO Fehler: Ueberlauf^^!&GOTO :ende)
)
)
REM Sortierung vornehmen
SORT "%datei%" /o "%sort_ausgabe%"
REM Sortierte Temp-Datei auslesen
FOR /f "tokens=1-2 delims= " %%i IN ('FINDSTR . "%sort_ausgabe%"') do (
SET namensteil1=%%i%
SET zahl2=%%j
CALL :null
)
GOTO :ende
:null
REM Fuehrende Null(en) wieder entfernen
SET zahl3=!zahl2:~0,1!
IF !zahl3! EQU 0 (
SET zahl2=!zahl2:~1!
GOTO :null
) ELSE (
REM Verzeichnissse numerisch sortiert ausgeben
ECHO !namensteil1! !zahl2!
GOTO :eof
)
GOTO :eof
:ende
REM Temporaere Dateien entfernen
IF EXIST "%datei%" DEL /f "%datei%" 1>NUL 2>NUL
IF EXIST "%sort_ausgabe%" DEL /f "%sort_ausgabe%" 1>NUL 2>NUL
Viel Spaß beim Testen.
Herzliche Grüße
batti-batch
Antwort 5 von achim_13086
Hallo Bassix,
soweit ich darüber orientiert bin, ist CMD im wesentlichen gleich dem Befehlsinerpreter " Command.com " aus den Vorversionen von Windows XP.
Dort besteht die Möglichkeit folgenden Befehl im " DOS-Fenster " einzugeben, damit Verzeichnisse und Dateien alphabetisch sortiert dargestellt werden:
" dir /a/o/w/p Laufwerk: "
Die Optionen haben folgende Funktion:
/a = alle Dateien und Verzeichnisse ungeachtet ihrer Atrribute anzeigen
/o = nach Namen sortiert, wobei Verzeichnisse zuerst angezeigt werden
/w = Darstellung zeilenweise von links nach rechts
/p = Anzeige seitenweise, Anzeige wird durch Drücken einer Taste
fortgesetzt.
Einfach einmal cmd starten und an der Eingabeaufforderung Dir /? eingeben. In der Regel werden dir die möglichen Optionen angezeigt. Ich schätze, dort wirst Du die erforderliche Option finden.
Ich hoffe, ich konnte mit meinen Hinweisen zur Lösung deines Problems beitragen.
Guß
Joachim
soweit ich darüber orientiert bin, ist CMD im wesentlichen gleich dem Befehlsinerpreter " Command.com " aus den Vorversionen von Windows XP.
Dort besteht die Möglichkeit folgenden Befehl im " DOS-Fenster " einzugeben, damit Verzeichnisse und Dateien alphabetisch sortiert dargestellt werden:
" dir /a/o/w/p Laufwerk: "
Die Optionen haben folgende Funktion:
/a = alle Dateien und Verzeichnisse ungeachtet ihrer Atrribute anzeigen
/o = nach Namen sortiert, wobei Verzeichnisse zuerst angezeigt werden
/w = Darstellung zeilenweise von links nach rechts
/p = Anzeige seitenweise, Anzeige wird durch Drücken einer Taste
fortgesetzt.
Einfach einmal cmd starten und an der Eingabeaufforderung Dir /? eingeben. In der Regel werden dir die möglichen Optionen angezeigt. Ich schätze, dort wirst Du die erforderliche Option finden.
Ich hoffe, ich konnte mit meinen Hinweisen zur Lösung deines Problems beitragen.
Guß
Joachim