Frage

Wir können nach Namen in Windows Explorer geordnet in einem Verzeichnisdatei sehen.

Wenn ich versuche, die gleiche Sache in der Windows-Eingabeaufforderung es Aufträge mit Namen anders - richtig :

dir *.jpg /ON /B

cubierta.jpg
pag00.jpg
pag06.jpg
pag08.jpg
pag09.jpg
pag100.jpg
pag101.jpg
pag102.jpg
pag103.jpg
pag104.jpg
pag105.jpg
pag106.jpg
pag107.jpg
pag108.jpg
pag109.jpg
pag11.jpg, etc, etc, etc, ...

Gibt es eine Möglichkeit dir zu erhalten nach Namen zu bestellen, wo es die Zahlen liest sich wie ein Mensch tun würde?

War es hilfreich?

Lösung

Ihre beste Möglichkeit (wenn möglich) ist genug, um führende Nullen (zwei in diesem Fall), um Ihre kleineren Zahlen zu addieren, so dass die Art wie erwartet kommen.

Andere Tipps

Windows Explorer verwendet eine spezielle Sortierfunktion, StrCmpLogicalW , die wird nicht von cmd.exe , damit die Unterschiede in der Ausgabe verwendet. Sie könnten Ihr eigenes Sortierprogramm mit ihr schreiben, aber.

Sie können auch in Michael Kaplan Einträge auf dieser interessiert sein Thema (von Raymond Chen Vorschlag Box ).

Er er er. Haben Sie alle meine Lösung wissen?

Ich verwende ein Programm namens ImageMagick, die meine 200MB PDF-Dateien in JPG konvertiert. Am Ende des langwierigen Prozesses serialisiert es alle Dateien in numerischer Reihenfolge ... Also im Grunde das Dateierstellungsdatums Wertsteigerungen leicht, da jede Datei auf die Festplatte geschrieben wird. So eine der folgenden zwei Batchdatei Befehle werden die Dateien in ‚richtigen‘ Reihenfolge schreiben:

dir *.jpg /ODN /B > files.txt

for /f "tokens=*" %%a in ('dir *.jpg /ODN /B') do (
    echo ^<page^>%%a^</page^> >>pages.xml.fragment
)

So ist die dir * .jpg / OD Befehl Befehl, den Verzeichnisinhalt von aufsteigend (Schöpfung?) Datum, und wir können die tatsächlichen Dateinamen vollständig ignorieren.

Momentan gibt es keine eingebauten Kommandozeilen-Tools, die können Art natürlich. Wenn Sie bitte wollen Stimme für die Funktion Microsoft ihre Meinung ändern

Dies kann jedoch mit einem regex Ersatz simuliert werden. Unter Windows können Sie JScript und VBS verwenden, das zu tun. Aber der einfachste Weg ist mit Powershell. Sie können es von cmd.exe wie folgt aufrufen

powershell -Command "(Get-ChildItem | Sort-Object { [regex]::Replace($_.Name, '\d+', { $args[0].Value.PadLeft(20) }) }).Name"

Natürlich müssen Sie die Nummer in PadLeft(20) ändern, wenn Sie Ihre Dateien eine längere Reihe von Ziffern enthalten

Wie nach Dateinamen auf die gleiche Weise sortieren Windows Explorer tut?

Eine native Batch-Lösung finden Sie in Natürlich Dateien sortiert in Batch wenn Ihre Dateien nur eine einzige Nummer am Ende

@echo off
setlocal enabledelayedexpansion
for %%a in (*.txt) do (
    set num=00000000000000000000%%a
    set num=!num:~-20!
    set $!num!=%%a
)
for /f "tokens=1,* delims==" %%a in ('set $0') do echo %%b

4NT / TCC / TC von JPSoft natürliche Sortierreihenfolge verwenden standardmäßig; abwechselnd, wenn Sie haben Zugang zu einer GNU „Art“ -Programm, wie der Cygwin Tools , können Sie etwas tun, wie " ls -1 | / bin / Art -g“oder "dir / b | \ cygwin \ bin \ Art -g"; das werden Sie die Dateinamen in natürlicher Sortierreihenfolge.

Wenn Sie auf Werkzeuge beschränkt sind, die Fenster heimisch sind, können Sie versuchen, die Windows Scripting-Tools und wie ein Filesystem verwenden, um etwas tun, um die Dateinamen zu bekommen, und reguläre Ausdrücken den numerischen Teil der Dateinamen zu extrahieren als Schlüssel in einem Dictionary-Objekt zu verwenden. Ich werde die tatsächliche Codierung als Übung dem Leser überlassen:)

Nein, es gibt keine Möglichkeit, dies zu tun. Windows Explorer verwendet einen anderen Ansatz, um dies zu handhaben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top