Supportnet Computer
Planet of Tech

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,

Zitat:
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 ?

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

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

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: