Windowsの「dir」コマンド、名前による順序付け&< something>

StackOverflow https://stackoverflow.com/questions/242913

  •  04-07-2019
  •  | 
  •  

質問

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 を名前で並べ替えて、人間が行うように数字を読み取る方法はありますか?

役に立ちましたか?

解決

(可能な場合)最善のオプションは、小さい数字に十分な先行ゼロ(この場合は2)を追加して、ソートが期待どおりに行われるようにすることです。

他のヒント

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

this のMichael Kaplanのエントリにも興味があるかもしれません件名(Raymond Chenの提案ボックス)。

彼彼彼。私のソリューションを知りたいですか?

200MBのPDFファイルをJPGに変換するImageMagicというプログラムを使用しています。長いプロセスの最後に、すべてのファイルが番号順にシリアル化されます。したがって、基本的に、ファイルの作成日は、各ファイルがハードドライブに書き込まれるにつれて値がわずかに増加します。したがって、次の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 コマンドは、ディレクトリのコンテンツを日付の昇順(作成?)で並べ替えます。実際のファイル名は完全に無視できます。

現在、自然にソートできる組み込みのコマンドラインツールはありません。必要に応じて、この機能に投票して、Microsoftの意志を変えてください

ただし、これは正規表現の置換を使用してシミュレートできます。 Windowsでは、JscriptとVBSを使用してそれを行うことができます。しかし、最も簡単な方法はpowershellを使用することです。このようにcmd.exeから呼び出すことができます

powershell -Command "(Get-ChildItem | Sort-Object { [regex]::Replace(

現在、自然にソートできる組み込みのコマンドラインツールはありません。必要に応じて、この機能に投票して、Microsoftの意志を変えてください

ただし、これは正規表現の置換を使用してシミュレートできます。 Windowsでは、JscriptとVBSを使用してそれを行うことができます。しかし、最も簡単な方法はpowershellを使用することです。このようにcmd.exeから呼び出すことができます

@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 <*>') do echo %%b

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

Windowsエクスプローラーと同じ方法でファイル名で並べ替える方法

ネイティブバッチソリューションは、 ファイルの末尾に番号が1つしかない場合は、ファイルをバッチで自然にソートします

<*>.Name, '\d+', { $args[0].Value.PadLeft(20) }) }).Name"

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

Windowsエクスプローラーと同じ方法でファイル名で並べ替える方法

ネイティブバッチソリューションは、 ファイルの末尾に番号が1つしかない場合は、ファイルをバッチで自然にソートします

<*>

4NT / TCC / TCの JPSoft は、デフォルトで自然なソート順を使用します。あるいは、GNU&quot; sort&quot;にアクセスできる場合 Cygwinツールなどのプログラムでは、&quot; ls -1 | / bin / sort -g&quot;または&quot; dir / b | \ cygwin \ bin \ sort -g&quot ;;これにより、ファイル名が自然なソート順になります。

Windowsネイティブのツールに制約されている場合は、 Windows Scripting tools およびFileSystemObjectを使用してファイル名を取得するなどの操作を行い、正規表現を使用してファイル名の数値部分を抽出し、Dictionaryオブジェクトのキーとして使用します。実際のコーディングは読者への演習として残しておきます:)

いいえ、これを行う方法はありません。 Windowsエクスプローラーは、異なるアプローチを使用してこれを処理します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top