5

Windows エクスプローラーで名前順に並べられたディレクトリ ファイルを確認できます。

Windowsコマンドプロンプトで同じことを試すと、名前の順序が異なります-正しく:

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

dir人間が行うように数字を読み取る名前で注文する方法はありますか?

4

6 に答える 6

8

最良のオプション (可能であれば) は、小さい数値に十分な数の先行ゼロ (この場合は 2 つ) を追加して、並べ替えが期待どおりに行われるようにすることです。

于 2008-10-28T11:13:47.953 に答える
5

Windows エクスプローラーは特別な並べ替え関数StrCmpLogicalWを使用しますが、これはcmd.exeでは使用されないため、出力が異なります。ただし、それを使用して独自の並べ替えプログラムを作成することもできます。

この テーマに関する Michael Kaplan のエントリ(Raymond Chen の提案ボックスから)にも興味があるかもしれません。

于 2008-10-28T11:42:15.680 に答える
1

それは自然な並べ替えと呼ばれます。現在、自然に並べ替えることができる組み込みのコマンド ライン ツールはありません。必要に応じて、Microsoft の考えを変える機能に投票してください

ただし、これは正規表現の置換を使用してシミュレートし、ゼロを埋めて数値を同じ長さにすることができます。このように、辞書式ソートは自然ソートと同等です。Windows では、Jscript と VBS を使用してそれを行うことができます。しかし、最も簡単な方法は、powershell を使用することです。このようにcmd.exeから呼び出すことができます

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

もちろんPadLeft(20)、ファイルに長い一連の数字が含まれている場合は、数字を変更する必要があります

Windows エクスプローラーと同じようにファイル名で並べ替えるには?

ファイルの末尾に数字が 1 つしかない場合、ネイティブ バッチ ソリューションは、 Naturally Sort Files in Batchにあります。

@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
于 2018-08-16T10:29:23.443 に答える
0

彼は彼です。私の解決策を知りたいですか?

ImageMagick というプログラムを使用して、200MB の PDF ファイルを JPG に変換しています。長いプロセスの最後に、すべてのファイルを番号順にシリアル化します...したがって、基本的に、各ファイルがハードドライブに書き込まれるにつれて、ファイルの作成日の値がわずかに増加します。したがって、次の 2 つのバッチ ファイル コマンドのいずれかが、「正しい」順序でファイルを書き込みます。

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

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

したがって、dir *.jpg /ODコマンドはディレクトリの内容を昇順 (作成日?) に並べ替えます。実際のファイル名は完全に無視できます。

于 2008-12-09T08:15:35.103 に答える
-1

JPSoft の4NT /TCC/TC は、デフォルトで自然な並べ替え順序を使用します。または、 Cygwin ツールsortなどの GNU プログラムにアクセスできる場合は、またはのようなことを行うことができます。これにより、ファイル名が自然なソート順で表示されます。ls -1 | /<cygwin>bin/sort -gdir /b | \cygwin\bin\sort -g

Windows ネイティブのツールに制約されている場合は、Windows スクリプト ツールを試して、 FileSystemObjectを使用してファイル名を取得したり、正規表現を使用してファイル名の数値部分を抽出して Dictionary オブジェクトのキーとして使用したりすることができます。 . 実際のコーディングは、演習として読者に任せます :)

于 2008-10-28T14:40:38.237 に答える
-2

いいえ、これを行う方法はありません。Windows エクスプローラーは、これを処理するために別の方法を使用します。

于 2008-10-28T11:12:29.407 に答える