none
forコマンドでワイルドカード指定した出力順について RRS feed

  • 質問

  • お世話になります。

    for“/D”コマンドで、ディレクトリの読み込み処理を作成しています。
    以下の環境でコマンドを実行した結果の出力順について教えてください。

    ・コマンド
    for /D %%i in (*) do echo %%i

    ・ディレクトリ
    c:\testのディレクトリ
    2010/01/07  02:05       <DIR>          test_201007
    2010/01/07  02:11       <DIR>          test_201006
    2010/02/12  04:49       <DIR>          test_201005
    2010/04/23  04:05       <DIR>          test_201004

    ・実行結果
    test_201004
    test_201005
    test_201006
    test_201007

    結果のソートについて、Microsoftのヘルプなどに明記されていないのですが、
    実行結果のとおりディレクトリ名の昇順で正しいのでしょうか?
    また、for /dでワイルドカードを指定した場合の出力順について明記されている
    Microsoftのマニュアルなどあれば教えてください。

    以上、宜しくお願いいたします。

    2010年8月16日 12:34

回答

  • チャブーンです。

    私が知っている限りですが、マニュアル類でソート順を明示したものは見たことはありません。

    で、For コマンドの「使い方」ですが、For コマンドはファイルやコマンドの標準出力(コレクション的な)の内容をパイプするためのもので、そのソート内容についてはとくに意識されていないでしょう。コマンドとして意識されていない以上「便宜的にアリファベット順になっている」ようにみえても、ほんとうにそうかどうかはソースコードレベルで確認するしかないように、思います。

    うえのような状態ですから、For コマンドの出力の「ソート順のルール」をあてにしてバッチやプログラムを組む、というのはよい結果にならないと思います。別の方法(WSHスクリプトでソート順を含めプログラムで制御する)で考えられた方がいいのではないでしょうか?

    • 回答としてマーク microsun 2010年8月22日 15:07
    2010年8月18日 3:34
    モデレータ

すべての返信

  • チャブーンです。

    私が知っている限りですが、マニュアル類でソート順を明示したものは見たことはありません。

    で、For コマンドの「使い方」ですが、For コマンドはファイルやコマンドの標準出力(コレクション的な)の内容をパイプするためのもので、そのソート内容についてはとくに意識されていないでしょう。コマンドとして意識されていない以上「便宜的にアリファベット順になっている」ようにみえても、ほんとうにそうかどうかはソースコードレベルで確認するしかないように、思います。

    うえのような状態ですから、For コマンドの出力の「ソート順のルール」をあてにしてバッチやプログラムを組む、というのはよい結果にならないと思います。別の方法(WSHスクリプトでソート順を含めプログラムで制御する)で考えられた方がいいのではないでしょうか?

    • 回答としてマーク microsun 2010年8月22日 15:07
    2010年8月18日 3:34
    モデレータ
  • ありがとうございます。

     

    バッチスクリプトでソートするという面では、使用しないほうが良いのですね。

    for /fとdirコマンドを組み合わせて対応しようかと思います。

    2010年8月22日 15:07