• ベストアンサー

DOSのdirコマンドで思うようにソートされません。

DOSコマンドで、フォルダ内のファイルリストを作成しようとしているのですが、思うようにソートされずに困っています。 たとえば、image.1.jpg,image.2.jpg,・・・・・image.10.jpg があったときに、"dir /b image.*.jpg > list" とすると、listファイル内では、 image.1.jpg image.10.jpg image.2.jpg image.3.jpg のような順番になってしまいます。 理想的には、以下のようになってほしいのですが。 image.1.jpg image.2.jpg image.3.jpg ・・・・ image.10.jpg UNIXコマンドの場合、"ls image.?.jpg > list", "ls image.??.jpg >> list" 以上のように処理することで、目的を達成できるのですが、 DOS環境で、以上の問題を解決する方法をどなたか教えてください。 宜しくお願いします<(_ _)>

質問者が選んだベストアンサー

  • ベストアンサー
  • Toshi0230
  • ベストアンサー率51% (836/1635)
回答No.3

#2です。前回の回答の中で、私の勘違いと誤記が1つずつありましたm(__)m。 > image.1.jpg,image.2.jpgなども追加されてしまいます。 Windows XPのDOSプロンプトで確認したところ、ご指摘の通りでした。DOSではUNIXと異なり、"?"が0または1文字を示すようです。回避策はちょっと思いつきません。(__; (ヘルプの説明か実装のどちらかが間違っているように思います) > C:> for /L %N in (1,1,50) do dir /b >> list これはコマンドが不完全でした。正しくは以下の通りです。 C:> for /L %N in (1,1,50) do dir /b image%N.txt >> list

peroncho
質問者

お礼

ご回答ありがとうございます。 教えていただいた方法で、無事に 問題を解決することができました。

その他の回答 (2)

  • Toshi0230
  • ベストアンサー率51% (836/1635)
回答No.2

> UNIXコマンドの場合、"ls image.?.jpg > list", > "ls image.??.jpg >> list" > 以上のように処理することで、目的を達成できるのですが、 これでいいんだったらDOSでも同じようにすればOKですが(^^;。 # 下の例ではファイルに出力する前に "sort"でソートしてます。 C:> dir /b image?.jpg | sort > list C:> dir /b image??.jpg | sort >> list あとはこんなのもありですかね? (Windows2000以上のDOSプロンプトでしか使えませんのでご注意) C:> for /L %N in (1,1,50) do dir /b >> list

peroncho
質問者

お礼

早速のご回答ありがとうございます。 試してみましたが、次のところ C:> dir /b image??.jpg | sort >> list でなぜか、image.10.jpgのみが出力されないと困るのですが image.1.jpg,image.2.jpgなども追加されてしまいます。 >あとはこんなのもありですかね? (Windows2000以上のDOSプロンプトでしか使えませんのでご注意) C:> for /L %N in (1,1,50) do dir /b >> list この方法については、使い方がわからないので もう少し勉強してみます。

  • yam4649
  • ベストアンサー率29% (8/27)
回答No.1

ファイル名に規則性を持たせなければなりませんね。 アスキーコード表に則りソートされますので、 image001,image002,image010,image100 と云うように連番部分の桁をそろえる必要があります。

peroncho
質問者

お礼

早速のご回答ありがとうございます。 ご指摘のようにファイル名を変えることができれば 問題ないのですが・・・ ファイル名を変更できないので、悩んでおります。

関連するQ&A

  • DOS/V Ver6.xx のDIRコマンド

    MS-DOS/V Ver6.xxのDIRコマンドで教えてください。 オプションなしで、ただ単に  dir のコマンドを打った場合、出力される順番はどういった順番になってるのでしょう?  ファイル名のアルファベット順?  拡張子のアルファベット順?  タイムスタンプ順? 3000個のファイルを持つディレクトリで  dir > list.txt でリダイレクトしてみたところ、上記のいずれでもなかったのですが、DOSはどういった順番で 出力してるのでしょう? よろしくお願いします。

  • コマンドプロンプト dir でのソート

    Windows7のコマンドプロンプトにてdirコマンドでのソートについて教えてください。 ソートするファイルはデジカメ写真群(jpeg形式)です。 ファイルが入ったフォルダでプロパティを見ると「日付時刻」「撮影日時」「アクセス日時」 「作成日時」「更新日時」があります。 推測ですが、写真を回転し保存したりして「更新日時」が変わっているのでは…と思って います。 複数のデジカメで撮った写真を撮影日時の順でソートしたくて dir/od と打つとどうやら 「撮影日時」のソートではなく「更新日時」でソートされている模様。 「撮影日時」でソートさせるにはどんなコマンドを打てばいいでしょうか? あるいはdirコマンドで「撮影日時」の情報も拾えればいいのですが....。 数百枚の写真を効率よく「撮影日時」でソートしたいです。 よろしくお願いします。 やりたいのは、リダイレクトした結果を元にファイル名を撮影日時順にナンバリングしたい のです。(意味通じます?)

  • WinXPとWin98で、DOSコマンド(DIR)の挙動が違う?気のせい?

    WindowsXP(SP2)のDOSコマンドで dir /s /b Y:\ > C:\files.txt とやると、ネットワークドライブとして割り当ててある Y:ドライブのファイルやフォルダなどのオブジェクトのフルパス一覧リストを 所定のパス(C:)に作れますが Windows98で同じコマンドをたたいても、意味が異なるのですか? Windows98でやると、途中でリスト化を止めてしまうように見受けるのですが。

  • bash forコマンドでソート

    bash forコマンドでソート CentOS8 bashの forコマンドで、ディレクトリ内のファイル名を部分指定した降順でソートした状態で順次読み込みしたいです。 <ファイル> aaa.dat bbbb_0001.dat TEST_0001.file TEST_0002.file TEST_0003.file <アウトプット> TEST_0003.file TEST_0002.file TEST_0001.file 基本的な読込と、lsコマンドの結果を基に読み込む方法はわかりましたが、これに降順ソートを加えるにはどうすれば良いでしょうか? <基本的な読込> for file in /dir1/TEST_*.file do echo $file done <lsコマンドの結果を基に読込> for file in $(ls /dir1/TEST_*.file) do echo $file done

  • sortコマンドについて

    いつもお世話になっております。 sortコマンドについて質問させて下さい。 現在UNIXコマンドのsortによってファイルをソートしようとしています。 ソート対象となるファイルは下記の通りです。 ファイルの種類:csvファイル ファイルサイズ:80MByte 1レコード長:48Byte レコード数:120万レコード レコード例: 2,1000 ,1,10C0,15,0000000100000000000000000000000000000000 2,1117 ,1,10B0,16,0000000300000000000000000000000100000000 ・ ・ ・ そこで下記のようなコマンドにてソートしています。 sort -t, -k 1,1 -k 2,2 -k 3,3 -k 4,4 < fileA.csv > fileB.csv すると「sort:0653-657ソート中に書込みエラーが発生しました。」と出力され中断してしまいます。 自分なりにsortコマンドについて調べてみたところ、 /usr/tmpディレクトリのファイルシステムがいっぱいになることでコマンドが失敗しているようです。 (一時的にそのディレクトリにソート内容を展開しているようでした) 社内にて/usr/tmpディレクトリのファイルシステムの拡張を求めたところ「できない」と言われてしまいました。 開発の最終段階でのボリュームテストを行ったときの障害でしたので、 処理を大幅に変更するような対処は出来ない状況です。 代替方法などありましたらご教示頂きたいと思います。 以上、宜しくお願い致します。

  • Dirコマンドでフォルダ内ファイルの合計サイズをだすには?(コマンドプロンプトにて)

    いろいろ調べましたが不明な点があり、質問します。 WindowsのDOSプロンプトでdirコマンドを打つとフォルダ・ファイルの一覧が表示されますが、その中にファイルサイズが表示されています。 このサイズを合計できるコマンドはありませんか? DIRコマンドのオプションを調べましたがそれらしいものが見当たりません。 具体的には C:\xxx\配下に50個程度のファイルがあります。 その50個の合計サイズを知りたいです。 xxxフォルダの親フォルダにはアクセス不可です。 ずーっと悩んでいます。よろしくお願いします。 なお、OSはWindowsNTか2000で使用予定です。

  • DOSプロンプトでLinuxコマンドを使えるようにするには

    Windows XP (SP2)を使っています. 以前はDOSプロンプトでLinuxコマンドが使えたんですが,今は使えません.ディレクトリの中身を見るのもlsでなくdirとうたなくてはなりません. 最近HDDを増設したのに伴い,以前は入れていたCygwinを消してしまいました.これが原因なんでしょうか? もしCygwinをいれないとLinuxコマンドが使えないのであればその旨を教えていただけないでしょうか?再インストールします. 以上,よろしくお願いいたします.

  • エクセルのVBAからDOSコマンドのDIRを実行したい

    DOSコマンドのDIRコマンドを、エクセルのVBAから実行したいのですがうまくいきません。助けてください。 DOSプロンプト上で、たとえば「DIR c:\*.mdb /s/b > c:\aaa.txt」を実行すると、Cドライブ上の拡張子(MDB)のファイルの一覧を、aaa.txt上に出力できるのですが、それをエクセルのVBAから実行したいのです。 Shell関数で、COMMAND.COMを実行することはできるのですが、それ以降の指定がわかりません。COMMAND.COMを実行した後、DOSプロンプトをアクティブにし、「DIR c:\*.mdb /s/b > c:\aaa.txt」をsendkeyで送れば・・・とアドバイスをうけたりもしたのですが、sendkeyでなくてもできた記憶があります。 よい方法があれば教えてください。 よろしくお願いします。

  • C言語でファイルの中身をソートするコマンド

    unixのsortのようなコマンドはC言語にあるのでしょうか。 配列のソートではなくてファイルに対してのコマンドです。 sortをsystem()で使用すれば良いのでしょうが、C言語のコマンドにあると聞きました。おそらくunix関連のC言語のコマンドだと思うのですが。

  • UNIXのソートコマンドについて

    はじめまして、UNIXのsortコマンドについて質問です。 CSVファイルをソートする際、1行目がタイトル行で2行目以降をソートしたいのですがよい方法をご存知ですか? OSはSunOSでバージョンは3.8くらいだったと思います。 よろしくお願いします。