Robocopyはサーバー管理101なので、私はかなりばかげていると感じます。しかし、ファイルの一覧表示に問題があるようです。
ディレクトリとサブディレクトリにサイズが10MBを超えるすべてのファイルを一覧表示したいと思います。
docs によると、これは機能するはずです:
robocopy c:\ /min:10485760 /s /l /fp /tee /log:c:\robocopy.log /njh /njs /ndl
しかし、実行すると「宛先ディレクトリが指定されていません」というエラーが返されます。これは、リスト(/ L)オプションを使用している場合は不要だと思います。
また、次のように宛先と同じディレクトリを含める場合:
robocopy c:\ c:\ /min:10485760 /s /l /fp /tee /log:c:\robocopy.log /njh /njs /ndl
何も返されません。しかし、ディレクトリなしリスト(/ ndl)を削除すると、すべてのディレクトリのリストが表示されます。
だから私の質問は:ディレクトリツリー構造で10MBを超えるファイルをリストするためにrobocopyを使用するにはどうすればよいですか?
ありがとう!
robocopy
に縛られていない場合は、for
の変数置換を使用してこれを実現できます:-
@for /f "tokens=*" %F in ('dir /s /b /a:-d c:\') do @(
if %~zF geq 10485760 echo %F
)
dir /s /b /a:-d c:\
は、/s
の下のすべての非ディレクトリ(/a:-d
)の再帰的なリスト(c:\
)をベアフォーマット(/b
)で提供し、解析を容易にします。
for
はそのリストをループし(スペースを含むパスがある場合は"tokens=*"
が必要です)、任意のサブの~z
変数修飾子を使用してファイルのサイズの参照を取得しましょう-コマンド(必要なサイズと比較するためのif
など)。
@
はコマンドのエコーを抑制するためのものであり、以前に@echo off
を呼び出したことがある場合(バッチファイルなど)は省略できます。
tdel を見てください。ファイルサイズと日付の操作に関しては、いくつかの非常に強力な機能があります。 「テスト」モードで実行して、実際にファイルの削除を実行するのではなく、一致するリストを作成できます。
宛先として%tmp%ディレクトリを含めてみてください。私はもうテストするためのrobocopyの古いバリアントを持っていませんが、/ lが実際にリストしていることを思い出しますそれが何をするのかファイルだけではありません。したがって、データが存在しない場所にデータを「送信」して、robocopyが宛先にまだ存在しないすべてのファイルとディレクトリを印刷するようにする必要があります。
Robocopyでは、/ QUITを使用してテンプレートジョブファイルを作成し(robocopyが構文のチェック以外を実行できないようにする)、宛先ディレクトリの代わりに/ NODDを使用している場合を除き、常に宛先ディレクトリを指定する必要があります。 、リストしているだけの場合でも。ファイルのリストを取得する方法は、たとえばTEMPの下に空のフォルダーを作成し、それを宛先として指定することでした。これは空になるため、ソース内のすべてのファイルがリストに表示されます。次に、完了したらtempの下のフォルダーを削除します。空のはずです。
Find はWindowsで使用でき、これと同様のクラスのほぼすべての質問に答えることができます。私heartfind :)