2012-01-17 7 views
1

私はolderfile上の変更日付がより古いと、これはcontrolfileを返すべきDOSでdir/TWスイッチは

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

使用して、それらの修正タイムスタンプに制御ファイルを使用してファイルのリストを比較しようとして機能していませんcontrolfile。しかし、それは作成日(olderfileの作成日がcontrolfileの後にある)と比較しているようで、常にolderfileを返します。 /twスイッチはdirに最後に書き込まれた日付(dir /?)を使用するように指示する必要があります。

:UPDATE:私はcontrolfileにサブフォルダに相対olderfileを持っていた今まで

olderfilecontrolfileと同じディレクトリにコピーしたとき、比較は期待通りに機能しました。つまり、上記のコマンドはcontrolfileを返しました。したがって、サブフォルダ内にあることは明らかに、サブフォルダの変更日がolderfileのものよりも早い場合でも、比較が破られます(controlfileより早く)。

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

答えて

1

まず、コードが失敗している理由の説明。

/Bオプションを指定しないでDIRを見ると、ファイルパスは常にファイル名とともにヘッダー行として表示されます。同じディレクトリ内に2つのファイル指定とともにsortオプションを使用すると、ファイルをソートして同じディレクトリヘッダーの下に表示することができます。ファイル名が繰り返されても、ヘッダーでどのファイルが参照されているかが分かります。

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

/Bオプションを追加すると、パスヘッダーは削除されますが、ソート動作は変更されません。絶対愚かで無駄なデザインですが、それはあなたが得るものです。

ネイティブWindowsコマンドのみで純粋なバッチを使用する場合は、解決策を見つけるのがはるかに問題になります。バッチを使って日付を扱うことは怒っている可能性があります。

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

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

COPYの提案が受け入れられない場合(私はあなたがそれを使用しないとあなたを責めません)、バッチ以外の何か、おそらくVBScript、Javascript、またはPowershellを使用することをお勧めします。または、おそらくバッチのようにいくつかのVBScriptをスローされたバッチのような方法です。

+0

あなたの返信を読む前に、私は目標ディレクトリに制御ファイルをコピーしようとしていたので、最初のファイルをサブディレクトリにコピーしました。その後、サブディレクトリをクリーンアップします。これは翻訳が必要でないことを意味する。または、2番目のファイルをコピーすると言った理由はありますか? – rutherford

+0

どちらにも違いは見られません。制御ファイル名がサブディレクトリにすでに存在する場合でも、問題はあります。しかし、それはあなたのためのケースではないように聞こえる。 – dbenham