コマンドラインを使用してWindowsのフォルダーを完全に削除する


57

内部に他のフォルダーとファイルを含む1つのフォルダーを削除する必要があります。私が試したdelrmdirコマンドが、時には彼らはいくつかのエラー行で失敗します:[PATH]: The directory isn't empty.

良い代替手段はありますか?


適切なフラグを持つrmdirがディレクトリツリー(および/またはツリー自体)のすべてを削除するかどうかに一貫性がなく、考えられる唯一の説明はHarry Johnstonの言うことです。
r_alex_hall

回答:


15

これは、自動ビルドスクリプトでよく起こります。

その理由は、そのディレクトリで「共有削除」を使用してファイルを開いているアプリケーションが原因であると思われます。つまり、アプリケーションはファイルの削除を許可します(これが、DeleteFile呼び出しが失敗しないと考える理由です)が、ファイルは、アプリケーションがそのハンドルを閉じた後にのみ消えます。

これは、rmdirコマンドがフォルダーを削除しようとしたときにファイルがまだ存在している可能性があるため、エラーメッセージが表示されることを意味します。その後すぐに、アプリケーションがハンドルを閉じ、ファイルが消え、フォルダーを調べて、どのファイルrmdirがそれについて話しているかを確認すると、空になります。

少なくともそれは私の理論です。

ハリー・ジョンストンが提案した回避策は良いようです。rmdirコマンドの間に一時停止を挿入するのは私だけです。もちろん、Windowsには簡単にスクリプト化できる「一時停止」コマンドはありません(修正:古いWindowsバージョンにはありませんが、新しいバージョンにはあります-コメントを参照してください)。ただし、秒単位の粒度で十分な場合はping、一時停止を作成するために使用できます。

ping -n {desired_delay_in_seconds + 1} 127.0.0.1 >nul

合計で:

rd /s /q foo
:: retry once
if exist foo (
    :: clear errorlevel
    cmd /c
    :: pause
    ping -n 2 127.0.0.1 >nul
    :: retry
    rd /s /q foo
)
:: retry yet again
if exist foo (
    cmd /c
    ping -n 2 127.0.0.1 >nul
    rd /s /q foo
)
:: give up
if exist foo {panic}

私の経験では、一時停止は必要ありませんが、YMMVです。(もちろん、実際に別のアプリケーションが動作している場合は、それを特定し、可能な場合は終了するまで明示的に待機することをお
ハリージョンストン

まあ...私は再試行ごとに1秒の遅延で10倍の再試行ループを実装しました。今すぐ動作します。一時停止を解除しようとするつもりはありませんが、それが再び失敗するのを見るためだけです:-)もちろん、それが必要だという意味ではありません。ただ用心深くしてください。
ポールグローク

2
OT:これがウィンドウが嫌いな理由です。すべてがとても難しい。rm -rf /directory/すべてのオペレーティングシステムでグローバルにする必要があります。

2
実際には、ある種の「一時停止」コマンドがあります。3秒休止するには、これを使用できますtimeout /t 3
。– r_alex_hall

@r_alex_hall Indeed(ただし、ネイティブではVista以降のみ、XP以前にはpauseコマンドはありません)
misha256

57

試してください:

rmdir /S your_directory

または:

rmdir /S /Q your_directory 

確認メッセージをスキップします。


1
私はすでに、これらのオプションを試してみましたが、私は書いたようにdelしてrmdir、何も聞いていない、彼らはただの説明では1のようないくつかの行を送信します。
フランチェスコザニーニ

2
rmdir /s削除可能なものはすべて削除されます。プログラムによってロックされているファイル、読み取り専用ファイル、または削除するために管理アクセスが必要なファイルがある場合があります。あなたのためにそれらのすべての状況を処理する単一のコマンドはありません
-nvuono

それでもエラーメッセージが表示される場合は、PowerShellを試してください。コマンドレットRemove-Itemは、rmdirよりも少し強力です。
AndrewQ

1
rmdir / S <ディレクトリ>ディレクトリおよびサブフォラとディレクトリを削除しています。また、「本当によろしいですか」と尋ねます。Windows10。ありがとう
-Jasmeet

1
@r_alex_hall RMDIR / sは、実際にディレクトリ内のファイルを削除します。ただし、DEL / sはファイルのみを削除し、ディレクトリを保持します。そのため、RMDIRがより良いオプションです
-JCH2k

11

いくつかの読み取り専用ファイルがある場合、del / Fオプションを使用してそれらを削除することができます

     del /S /F your_directory
     rmdir your_directory

また、いくつかの隠しファイルがあり、それらを本当に削除したい場合は、これを使用してこれを行うことができます

     del /S /F /AH your_directory
     rmdir your_directory

それでも失敗する場合は、一部のファイルを削除する権限がないか、一部のファイルがまだ使用中です。


これは正解です!
jdhao

4

Windows 7(およびおそらく他のバージョン)には、この症状を引き起こすバグがあると思います。または、サードパーティソフトウェアのバグである可能性があります。(万が一Symantec Endpoint Protectionがインストールされていますか?)

とにかく、私はかなり頻繁にそれに遭遇しました。ほとんどの場合、rd /s /q連続して2〜3回実行することで問題を回避できます。

これがバッチファイルにある場合、次のようなことができます。

rd /s /q foo
if exist foo rd /s /q foo
if exist foo rd /s /q foo
if exist foo echo Help! & pause

同意した。rd / s fooを使用すると(/ qサイレントオプションなし)、すべてのサブフォルダーが削除されますが、プロンプトにYと応答する必要があるため、バッチファイルに参加する必要があります。私が知っている理想以下。
アンソニー

3

del内部のファイルで使用してrmdirから、フォルダを削除します。

rmdirメソッドを使用してすべてのファイルも削除するは、ディレクトリ名の/Sスイッチを使用し、削除のプロンプトを表示しないようにします。ファイルをまったく見逃さないので、これが最善の方法です。ただし、/ Qスイッチの使用には注意してください。システムまたは隠しファイルの属性については警告しません。/Q


2

あなたが使用している場合は、ノードを、あなたは使用することができますrimrafこのような依存関係を:

インストールを実行します。 npm install rimraf -g

フォルダーを削除: rimraf SourceFolder

これはエラーが発生したときに役立ちました:

ソースファイル名がファイルシステムでサポートされている名前よりも大きい


0

Windowsの古いバージョンのフォルダー(DOS、Windows 95/98 / ME)DELTREEは、RMまたはと同等RMDIRです。私DELTREEはWindows 7ワークステーションでバッチファイルを使用していますが、問題ありません。

Deletes a directory and all the subdirectories and files in it.

To delete one or more files and directories:
DELTREE [/Y] [drive:]path [[drive:]path[...]]

  /Y              Suppresses prompting to confirm you want to delete
                  the subdirectory.
  [drive:]path    Specifies the name of the directory you want to delete.

Note: Use DELTREE cautiously. Every file and subdirectory within the
specified directory will be deleted.

0

次のように使用できると思います。

msg*your file is going to delete 
pause
del/s /q "C:\Users\Rd\Desktop\New folder (2)\" 
rmdir /s /q "C:\Users\Rd\Desktop\New folder (2)\"
mkdir "C:\Users\Rd\Desktop\New folder (2)"

1
SUへようこそ!なぜ私はダウン投票したのですか?1)不十分なフォーマット2)数年前にすでに投稿されたものと同じ基本的なソリューションを提供します(投稿されたソリューションを常に読んでから新しいものを投稿します!)3)質問に合わない求められなかった)。
ザグリムサン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.