web-dev-qa-db-ja.com

Windows 7でバッチファイルを使用してディレクトリツリーを削除するにはどうすればよいですか?

Windows 7の指定したフォルダーのコンテンツ全体をバッチファイルで削除したい。私の問題は、「del」または「erase」はファイルではなくフォルダーのみを削除し、「rmdir」または「rd」は指定されたフォルダーとそのコンテンツを常に削除するが、フォルダー自体ではなくコンテンツのみを削除することです。コマンド「rmdir /S /Q "C:\Share\*" '構文エラーが発生しました。

これを行う正しい方法は何ですか?

私はWindows 7 Professional 64ビットで作業しており、管理者権限を持っています。

37
Michael K

バッチファイルは2つのコマンドを実行する必要があります。1つはファイルをクリアするため、もう1つは子ディレクトリを削除するためです。削除するディレクトリはC:\Share\

バッチファイルは次のようになります。

del /s /f /q c:\share\*.*
for /f %%f in ('dir /ad /b c:\share\') do rd /s /q c:\share\%%f

del /s /f /qは、確認を求めずにディレクトリツリー全体を再帰的に検索し、すべてのファイル(読み取り専用ファイルも含む)を削除します。

2行目はすべてのサブディレクトリ(現在は空であるはずです)をループして削除します。

フォルダー全体を削除して再作成する(アクセス許可のために実行したくないと思いますか?)以外の方法は、フォルダーを一掃する最も簡単な方法です。

37
Windos
rmdir /s/q C:\Share

rmdirは完全名のみを受け入れ、ワイルドカードは受け入れないため、「構文エラー」が発生します。 (cmd.exeでは、ワイルドカードの展開は個々のプログラムに任されています。すべてがそうであるわけではありません。)

Share...で始まる多くのディレクトリがある場合は、forループを使用します。

for /d %f in (C:\Share*) do rmdir /s/q "%f"
27
user1686

コマンドプロンプトでこれを試してください:

rd /s/q "C:\Share"
12
Chau Chee Yang
for /f "delims=" %%f in ('dir /ad /b c:\share\') do rd /s /q c:\share\%%f

サブディレクトリにスペースを含む他のディレクトリが含まれている場合、これは機能しません。

これを機能させるために、私はこのように最後の文字列を引用する必要がありました

/ f "delims =" %% f in( 'dir/ad/b c:\ share \')の場合、rd/s/q 「c:\ share\%% f」

どうやら、これによりコマンドは、文字列そのものではなく、引用符で囲まれた文字列で動作します。

2
Jim JR Harris

どうですか?

rmdir /S /Q "target"
mkdir "target

編集:もちろん、このソリューションは、一時的なフォルダの不在を許容できる場合にのみ適用できます。

2

単に:

rmdir/s/q "パス"

mkdir "パス"

0
eli

すべてのサブフォルダーを削除する必要がありますが、ルート(およびルート内のファイル)はそのままにしたフォルダーでこれを試します:/ D%v in(*)do rd/s/q%v

/ Dはディレクトリに一致し、rd/s/qは一度に1つずつ削除します

0
Otto Hänninen