4

ディレクトリ ツリー内のすべての .jpg ファイルを 1 つのフォルダーに収集し、変更されたファイルのみをコピーするコマンド ライン ユーティリティ (またはコマンド ラインとして実行できるユーティリティ) を知っている人はいますか?

私はRenamerから始めました。これは、現在のディレクトリ内のファイルの名前を変更するのに最適ですが、パスを壊そうとしたときにうまくいきませんでした。これはおそらく、私が Renamer をよく知らないためです。最終的にテキスト ファイルのディレクトリ ダンプを作成し、次に REGEX の検索/置換を使用してバッチ ファイルを作成しましたが、これはほとんど効率的でもなく、自動化もされていません。

正規表現:

(G:\DIR\DIR\)([0-9]+\)([0-9]+\)([0-9]+\)([0-9]+\)(p[0- 9]+.jpg)

これを変更しました

G:\DIR\DIR\00\00\00\00\p0000000000.jpg

これに

G:\DIR\DIR\p0000000000.jpg

(コピー \1\2\3\4\5\6 \1\6) をバッチ ファイルにコピーします。

実際の人がログインせずに、スケジュールされたタスクとしてすべてを実行する必要があります。システム プロセッサを妨害したくないため、実際には Zip ファイルを探していません。また、ほとんどのファイルは毎日変更されません。これはファイル同期のようなものです。

4

3 に答える 3

8

Windows コマンド ラインでは、次の操作を実行できます。

for /R A %i IN (*.jpg) DO xcopy %i B /M /Y

ここで、A はソース ディレクトリ、B は宛先ディレクトリです。コマンド拡張機能を有効にする必要があります。これがデフォルトだと思います。

コメントからのいくつかのメモ:

パスにスペースが含まれる可能性がある場合は、2 番目の %i を引用符で囲む必要があります。これにより、文字列が xcopy コマンドによって 2 つの個別のパラメーターとして解釈されるのを防ぐことができます。A および B パスの周りで同じことを行う必要がある場合があります。このような:

for /R "A" %%i IN (*.jpg) DO xcopy "%%i" "B" /M /Y

これを .bat または .cmd ファイルに入れる場合は、このようにパーセンテージを 2 倍にする必要があります。

for /R A %%i IN (*.jpg) DO xcopy %%i B /M /Y

xcopy の /M オプションは、アーカイブ ビットが設定されたファイルのみをコピーし、このビットの設定を解除します。これにより、ファイルが 2 回コピーされるのを防ぎます。このビットを変更する他のプロセスがある場合、問題が発生する可能性があります。/D オプションを使用して、ファイルの最終変更時刻を宛先の時刻と比較し、新しいファイルのみをコピーすることもできます。

于 2009-05-13T16:56:08.600 に答える
0

Unix 環境では、findor rsync(およびおそらくシェルのいくつかの機能) を使用します。Cygwin と MinGW にはfind、おそらくが付属していrsyncます。findまた、Windows 用のスタンドアロン ポートをどこかで入手することもできます。

SOURCEシェル変数がコピーするファイルを含むサブディレクトリを含むディレクトリであり、シェル変数がそれらのコピー先のディレクトリである場合DEST:

find $SOURCE -name \*.jpg -exec cp --update \{\} $DEST/ \;

findは本質的に再帰的です。" -name \*.jpg" は、そのパターンに一致するファイルを選択します。-and を使用して条件を追加できます。コマンドの--updateオプションcp(または -u) は、ファイルが変更されているか、まだコピーされていない場合にのみ、ファイルをコピーします。他にcpも便利なオプションがあります。

$SOURCE が DIR/DIR/ の例のように $DEST と同じである場合、find は宛先ファイル (既にコピーされている) も検索しますが、これは問題ありませんが、cp は同じファイルをコピーしようとしていることを認識します。ただし、その無駄な作業を避けたい場合は、「for」と「if」(または何か) を使用して、DIR/DIR/ のサブディレクトリでのみ検索を実行できます。

また、rsync を使用することもできます。これには、ファイルがソース ディレクトリからも削除されている場合に、宛先ディレクトリからファイルを削除できるオプションや、その他多くのそのようなバリエーションがあります。

于 2009-05-13T17:06:54.947 に答える
0

パス形式から Windows を使用していると思います。

すべてを読んだわけではありませんが、http://www.infionline.net/~wtnewton/batch/batguide.html#6aが役立つかもしれません。

同じページには、dizzy.bat ( http://www.infionline.net/~wtnewton/batch/dizzy.bat ) があります。これを編集して、必要な操作を行うのは簡単です。

于 2009-05-13T16:34:52.957 に答える