質問

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

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

controlfileの変更日としてolderfileを返すはずです。ただし、作成日(controlfileの作成日の作成日はolderfileの作成日)と比較しているようです。 controlfileスイッチは、(olderfileから)最後の書き込み日を使用するように/twに指示する必要があります。

:更新:

これまで私はdirを基準にしてサブフォルダにdir /?を持っていました。 olderfilecontrolfileと同じディレクトリにコピーしたとき、比較は予想どおりに機能しました - すなわち、上記のコマンドがolderfileを返しました。したがって、サブフォルダにいることは明らかに比較を壊します(サブフォルダの変更日がcontrolfileのそれより早くcontrolfileのそれ自体のようなものであっても)。

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

役に立ちましたか?

解決

最初にあなたのコードが失敗している理由の説明。

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

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

/ bオプションの追加パスヘッダを削除しますが、ソート動作は変更されません。絶対に愚かで無駄なデザインですが、それがあなたが得るものです。 特にネイティブのWindowsコマンドだけで純粋なバッチを使用したい場合は、ソリューションに到着することが非常に問題があります。日付を扱うことはバッチで激しくなる可能性があります。

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

私が知ることができるものから、他のバッチソリューションは日付と時刻を解析する必要があります。それは全体のワームの缶を開く。 (原始的な)

コピー提案が受け入れられない場合(あなたがそれを使わないと決めるならば、私はあなたが責任を負っていないでしょう)それから私はバッチ以外の何か、おそらくVbscript、JavaScript、またはPowerShellを使うことをお勧めします。またはおそらく、VBScriptが投入されたバッチのようなハイブリッドアプローチ。

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