1

を使用して、変更されたタイムスタンプでファイルのリストを制御ファイルと比較しようとしています

dir /b /tw /od controlfile olderfile | more +1

controlfileの更新日olderfileが より前であるため、これは を返しcontrolfileます。olderfileただし、作成日 (の作成日は の後)で比較しているように見えるcontrolfileため、常に が返されolderfileます。/twスイッチはdir最後に書かれた日付 (から) を使用するように指示する必要があるため、dir /?/tw をドキュメントどおりに動作させたい場合、何が間違っているのかわかりません。

:アップデート:

今までolderfilecontrolfile. olderfile同じディレクトリにコピーするとcontrolfile、比較は期待どおりに機能しました。つまり、上記のコマンドが返されcontrolfileました。そのため、サブフォルダーにいると、明らかに比較が壊れます (サブフォルダーの更新日が の更新日olderfileよりも前の の更新日である場合でもcontrolfile)。

だから私の質問は、ディレクトリ構造が必要な場合、これをどのように回避するのですか?

4

1 に答える 1

1

最初に、コードが失敗する理由の説明。

/B オプションを指定せずに DIR を見ると、常にファイル パスがヘッダー行として表示され、ファイル名と一緒に表示されることはありません。同じディレクトリ内で 2 つのファイル指定とともに並べ替えオプションを使用すると、コマンドはファイルを並べ替えて、同じディレクトリ ヘッダーの下に表示することができます。ファイル名が繰り返されていても、ヘッダーによって参照されているファイルが正確にわかります。

ただし、2 つのファイル仕様が異なるパスにある場合、ファイル名が同じで、パスのみが異なる可能性があります。この場合、各ファイル仕様が独自のヘッダーの下でソートされない限り、ソートはうまくいきません。そうしないと、どのファイルがどれであるかわかりません。1 つのファイルを並べ替えるのはあまり意味がありませんが、ファイル仕様にワイルドカードを含めることができることを覚えておいてください。そのため、並べ替えオプションが異なるパスを使用する複数のファイル仕様と組み合わされると、DIR はパスごとに個別の並べ替えを実行し、それぞれに独自のヘッダーが付けられます。

/B オプションを追加すると、パス ヘッダーが削除されますが、並べ替えの動作は変わりません。絶対にばかげて役に立たないデザインですが、それが得られるものです。

特にネイティブの Windows コマンドのみで純粋なバッチを使用する場合は、解決策に到達することははるかに問題になります。日付の操作は、バッチで腹立たしいことがあります。

私が思いつく最も便利なバッチ ソリューションは、2 番目のファイルを親ディレクトリに一時的にコピーし、親ディレクトリ内で比較を実行してから、一時コピーを削除することです。ただし、ファイルが大きい場合は問題になる可能性があります。また、ファイル名が親ディレクトリ内にまだ存在していないことも前提としています。存在する (または存在する可能性がある) 場合は、一意であることがわかっている別の名前にファイルをコピーできます。もちろん、結果を翻訳する必要があります。

私が知る限り、他のバッチ ソリューションでは日付と時刻を解析する必要があります。それはワームの缶全体を開きます。(実行可能です)

COPY の提案が受け入れられない場合 (使用しないことにしたとしても、私はあなたを責めません)、バッチ以外のもの、おそらく VBScript、Javascript、または Powershell を使用することをお勧めします。あるいは、いくつかの VBScript が投入されたバッチのようなハイブリッド アプローチかもしれません。

于 2012-01-17T16:38:01.947 に答える