0
P1=c:\users\a\
P2=c:\users\b\
Q1=c:\users\c\
Q2=c:\users\d\
olderthan=7

P1 と P2 はソース ディレクトリです。Q1 と Q2 は宛先ディレクトリです。

このロジックの背後にある目的は、P1 および P2 ディレクトリから 7 日以上経過したファイルを探すことです。これらの古いファイルを Q1 と Q2 にコピーし、P1 と p2 から削除する必要があります。

以下のロジックを使用して、P1 から Q1 に対して実行しました。

FORFILES -p %P1% /d -%olderthan% -m *.%extension% -c "CMD /C XCOPY %P1%\@FILE %Q1%"
FORFILES -p %P1% /d -%olderthan% -m *.%extension% -c "CMD /C if exist %Q1%\@FILE del %P1%\@FILE /Q & echo @FILE Deleted." >> %loglocation%

しかし、for ループまたはその他のロジックを使用して、P1 から Q1 および P2 から Q2 に対してそれを行う方法は?

4

1 に答える 1

0

複数のソースと宛先のペアを処理できる単一のループはありません。各ペアに個別に同じロジックを適用する必要があります。おそらく、サブルーチンは物事を単純化します。

XCOPY コマンドと DEL コマンドを単一の MOVE コマンドに置き換えることで、ロジックを簡素化できます。

FORFILES /D オプションは、「より小さい」ではなく、「より小さいか等しい」ロジックを使用します。本当に 7 日以上経過したフォルダを移動したい場合は、代わりに 8 の値を使用する必要があります。

パスにスペースが含まれている場合に備えて、パスを引用符で囲みました。コマンド文字列内で引用符を二重にする必要があります。

拡張パラメーターの代わりにファイル マスク パラメーターを使用して、ルーチンをより柔軟にしました。

@echo off
call :moveOldFiles c:\users\a *.txt 7 c:\users\c >>mylog.log
call :moveOldFiles c:\users\b *.txt 7 c:\users\d >>mylog.log
exit /b

:moveOldFiles  sourceDir  extension  minAgeInDays  destinationDir
forfiles /p "%~f1" /m %2 /d -%3 -c "cmd /c move /y @path ""%~f4\"" && echo @path moved to "%~f4"""
exit /b

FORFILES の代わりに ROBOCOPY を使用することを検討する必要があります。パフォーマンスが向上し、非常に柔軟になります。FORFILES と同様に、ROBOCOPY をソース/宛先のペアごとに 1 回呼び出す必要があります。

于 2012-08-27T12:42:52.037 に答える