1

forfiles コマンドで検索マスクを使用して特定の拡張子のファイルをターゲットにする方法は知っていますが、特定の拡張子を避けて他のすべてをキャッチしたい場合に取り組んでいます。

forfiles コマンドでこれを実現する簡単な方法はありますか? または、このプロセスを処理するためにカスタムの for ループを作成する必要がありますか? 以下のようなコマンドを実行して、事前に検索マスクを定義する必要があるとは考えていません。

for %G in (.txt, .edi, .csv) do forfiles -p "C:abc\del" -s -m *%G -d -10 -c "cmd /c echo @path"

私の使用例は、暗号化されていないすべてのファイルを単一の拡張子に基づいてディレクトリから再帰的に削除することです。これは私の負の値になります。

4

2 に答える 2

0

私の質問に対する@Compoのコメントによると、forfilesコマンドに否定的な検索マスクを適用するアプローチは、次のようにcmd実装にフィルターを追加することです。

forfiles /P %localDir% /S /M *.* /C "cmd /c if not @EXT == %ignoredExtension% echo @PATH

ただし、@Compo は、この実装により、見つかったすべてのファイルに対して新しい cmd.exe インスタンスが開かれるという正当な懸念を提起しました。ファイル数が固定されているか一定であることがわかっている場合、これはまともなアプローチかもしれませんが、スケーリングできるより効率的な代替手段は、作成する前に for ループ インスタンスでこのフィルターを適用する for ループを手動で作成することです。 do 操作の呼び出しは次のようになります。

For /F "Delims=" %%G In ('dir /A-D^|FindStr /VE %ignoredExtensions%')Do @echo %%G

于 2019-07-26T21:31:10.800 に答える