- 締切済み
notnotさん 応用が出来ず教えてください
先日教えて頂きました2つを組み合わせたところ、C:\DDD内のファイルが 膨大なため処理時間がかなりかかってしまうことが判明しました。 そこでその2の処理ですが、その1で得られたC:\CCC内のファイルだけを 対象にC:\DDD内の同一ファイルを判定し、その結果同一である場合だけ C:\CCC内のファイルを削除したいのです。 親フォルダである\AAA~\DDD以下のサブフォルダの構成はどれも同じです。 説明が上手く出来ませんがよろしくお願いします。 その1 バッチファイルでファイルを比較後他のフォルダにコピ http://okwave.jp/qa/q7811159.html cd /d C:\AAA REM 以下のすべてのファイルについて、SUBを呼び出す for /f "delims=" %%F in ('dir /b /s /a-d') do call :SUB "%%~F" goto :EOF :SUB REM 文字列を置き換えて比較対象のファイル名、コピー先のファイル名を求める set X="%~1" set Y=%X:C:\AAA=C:\BBB% set Z=%X:C:\AAA=C:\CCC% REM 内容の比較 fc %X% %Y% >NUL 2>NUL REM 一致したら戻る if %ERRORLEVEL% == 0 goto :EOF REM 一致しなかったらコピー echo F | xcopy %X% %Z% その2 http://okwave.jp/qa/q7819818.html http://okwave.jp/qa/q7819818.html @echo off cd /d C:\DDD for /f "delims=" %%A in ('dir /b /s /a-d') do ( for /f "tokens=1,2" %%B in ('dir "%%A" /t:c ^| findstr /b 2') do ( for /f "tokens=1,2" %%D in ('dir "%%A" /t:w ^| findstr /b 2') do ( if "%%B %%C" == "%%D %%E" del "%%A" ) ) )
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- notnot
- ベストアンサー率47% (4900/10358)
時間短縮するかどうかは、ファイルの大きさに依りますね。時間短縮はほとんど無いだろうというのは、個々のファイルはそこそこ大きい(キロバイト単位)だろうという前提での回答です。 ファイルがすべて数バイトならある程度短縮効果はあるかも。 何をしたいのか、文章からいまいち読み取れないのですが、こういうことですかね。 \AAA\以下のすべてのファイルについて、AAAをBBBに変えたファイルと内容が同じならば、それをいったん\CCCのしたにコピーするけど、AAAをDDDに変えたファイルの作成日時と更新日時が等しいときはさっきコピーしたCCCのファイルを消す。 cd /d C:\AAA for /f "delims=" %%F in ('dir /b /s /a-d') do call :SUB "%%~F" goto :EOF :SUB set X="%~1" set Y=%X:C:\AAA=C:\BBB% set Z=%X:C:\AAA=C:\CCC% fc %X% %Y% >NUL 2>NUL if %ERRORLEVEL% == 0 goto :EOF echo F | xcopy %X% %Z% set W=%X:C:\AAA=C:\DDD% for /f "tokens=1,2" %%B in ('dir %W% /t:c ^| findstr /b 2') do ( for /f "tokens=1,2" %%D in ('dir %W% /t:w ^| findstr /b 2') do ( if "%%B %%C" == "%%D %%E" del %Z% ) ) )
- Tacosan
- ベストアンサー率23% (3656/15482)
たとえどれだけ絞ることができるとしても, 「絞る」ために必要な時間はかわらないよ.
- notnot
- ベストアンサー率47% (4900/10358)
時間がかかるのは、その1の処理のfcコマンドなので、 その2の処理対象を絞ったところで、全体の時間短縮にはつながりません。
- notnot
- ベストアンサー率47% (4900/10358)
すみませんが、質問文の意味がわかりません。 単に時間がかかるだけなら待てば良いのでは?
補足
説明が悪くすみません。 例えばですが、 その1の処理後に選別されたC:\CCC\ddd\jkl.jpgのファイル名(jkl.jpg)を C:\DDD\ddd\ファイル名(jkl.jpg)としてその2の処理を行い、 その結果同じであればC:\CCC\ddd\jkl.jpgを削除したいのです。 > 単に時間がかかるだけなら待てば良いのでは? はい、そう言われてしまえばそうです
補足
数十万ファイルから場合によっては数百あるいは数千まで絞る事になります なぜそのようなことが断言できるのでしょうか?