「rm -rf」はWindowsと同等ですか?


509

フォルダとその子を再帰的に削除する方法が必要です。

これのためのビルド済みツールはありますか、それとも作成する必要がありますか?

DEL /S ディレクトリは削除しません。

DELTREE Windows 2000+から削除されました


1
del / sは(a)まったく機能しない(一部のバージョンでのみ使用可能)または(b)トップレベルのディレクトリを残して、その下のすべてを削除するか、または(c)すべてのファイルを削除するときにすべてのディレクトリを残すか?
wnoise 2008

@Aaron、答えc、ディレクトリとファイルを削除するにはrmdir / sを使用する必要があります。
ウェッジ

31
それは本当にformat c:Linuxのインストールではないですか?もちろん冗談です。
Basile Starynkevitch、2015年

回答:


694

従来のコマンドプロンプト(cmd.exe)を使用している場合は、RMDIRまたはRD:

rd /s /q "path"

RMDIR [/ S] [/ Q] [ドライブ:]パス

RD [/ S] [/ Q] [ドライブ:]パス

/ Sディレクトリ自体に加えて、指定されたディレクトリ内のすべてのディレクトリとファイルを削除します。ディレクトリツリーを削除するために使用されます。

/ Qクワイエットモード。/Sを使用してディレクトリツリーを削除してもよいかどうか尋ねません。

あなたはPowerShellを使用している場合は、使用することができますRemove-Item(にエイリアスされたdeleraserdrirm及びrmdir)と取り-Recurseに短絡することができ、引数を-r

rd -r "path"

84
多数のファイルの場合、rmdir / s / qは通常、エクスプローラーでの同等の "dirの選択、シフト+削除"操作よりも大幅に高速であることを指摘する価値があります。
ウェッジ

9
これはrm -rfのようにファイルを削除しません。また、ディレクトリが存在しない場合はゼロ以外の値を返すためrd /s /q foo && echo "yay"、ディレクトリ "foo"が存在しない場合は失敗します。
Dirk Groeneveld 2013年

17
dirの場合はどうでしょう。空ではなく、いくつかのファイルが取得さAccess is deniedれますThe process cannot access the file because it is being used by another processか?
ユージーン

6
私は7でこれを試してみましたが、あなたは/ Sと/ Q(キャップ)を行う必要がある
フォードは知事の

2
ここで謎めいた。私このコマンドを試したところ、ディレクトリツリーにファイルがある場合は機能しませんでした。今戻ると。。。魔法のように動作するようです。他の誰かがこれと一貫性のない行動を経験していますか?!
Alex Hall

139

管理者:

takeown /r /f folder
cacls folder /c /G "ADMINNAME":F /T
rmdir /s folder

sysファイルを含むあらゆるものに対応

編集:私は実際に、ファイルパスが長すぎる問題も解決する最良の方法を見つけました:

mkdir \empty
robocopy /mir \empty folder

3
私のヒーロー!そして、もう一つのヒント:あなたはCであなたの空のフォルダを作成します:\空、その後、各クレイジーフォルダ内たら、1だけで行うことができますrobocopy /mir c:\empty .
レオン・ペルティエ

takeown私は誤ってのrsyncをLinuxシステムからフォルダをコピーしたと私はそのフォルダを削除するには、no権限を持っていたとして私を助けた...さえrobocopyを働きました。ありがとう
ジャルダ

1
とてもいい答えです。できます。(ページの他のすべての答えはしません)。ただし、caclsは非推奨です。現代的な答えを出すことは可能ですか?2番目のバリアントはすでに機能しており、非推奨ではありません。
Gangnus

これは私には何もしません。誰かがそれがどのように機能することになっているのか説明してくれませんか?(robocopy)-フォルダーの内容は削除する可能性がありますが、フォルダー自体は削除しません
Ralf

114

RMDIR [/S] [/Q] [drive:]path

RD [/S] [/Q] [drive:]path

  • /S ディレクトリ自体に加えて、指定されたディレクトリ内のすべてのディレクトリとファイルを削除します。 ディレクトリツリーを削除するために使用されます。

  • /Q クワイエットモード。ディレクトリツリーを削除してもよいかどうか尋ねません。 /S


13
パラメータの説明をありがとう。受け入れられた答えは、残念ながらこれを行いません。
Thomas

1
質問に対する最も単純で完璧な答え。受け入れられるものでなければなりません。
Artif3x


19

パスに移動して、このコマンドをトリガーします。

rd /s /q "FOLDER_NAME"

/ s:指定したディレクトリと、ファイルを含むすべてのサブディレクトリを削除します。/ sを使用してツリーを削除します。

/ q:rmdirをクワイエットモードで実行します。確認なしでディレクトリを削除します。

/?:コマンドプロンプトにヘルプを表示します。


9

ディレクトリが存在するかどうかにかかわらず、ディレクトリを削除するには以下を使用します。

if exist myfolder ( rmdir /s/q myfolder )


6

受け入れられた答えは素晴らしいですが、Nodeがインストールされていると仮定すると、グロビングパターンを可能にするノードライブラリ「rimraf」を使用して、これをより正確に行うことができます。これを頻繁に使用する場合(私は使用します)、グローバルにインストールします。

yarn global add rimraf

次に、たとえば、私が常に使用するパターン:

rimraf .\**\node_modules

または、グローバルインストールを回避できるワンライナーですが、パッケージの動的ダウンロードには少し時間がかかります。

npx rimraf .\**\node_modules

2
OSに依存しないため、問題に対する確実な解決策。
Denialos

5

このコマンドを試してください:

del /s foldername

一部のファイルがロックされていてrmdirが失敗すると、rmdir / s / qと組み合わせて機能しました。del / foldernameはロックされたファイルを削除し、rmdirがルートディレクトリを削除できるようにしました。いいね。
bbqchickenrobot 14年


4

まず、何をするかを見rm -rfてみましょう:

C:\Users\ohnob\things>touch stuff.txt

C:\Users\ohnob\things>rm -rf stuff.txt

C:\Users\ohnob\things>mkdir stuff.txt

C:\Users\ohnob\things>rm -rf stuff.txt

C:\Users\ohnob\things>ls -l
total 0

C:\Users\ohnob\things>rm -rf stuff.txt

rm -rf戻りが予想される場合に一般的に使用される3つのシナリオがあります0

  1. 指定されたパスは存在しません。
  2. 指定されたパスは存在し、ディレクトリです。
  3. 指定されたパスは存在し、ファイルです。

私はすべてのアクセス許可を無視しますが、とにかくWindowsのアクセス許可を使用したり、Windowsのものへの書き込みアクセスを拒否したりする人はいません(これは冗談ですが...)。

最初に0に設定ERRORLEVEL、パスが存在する場合にのみパスを削除します。パスがディレクトリかどうかに応じて異なるコマンドを使用します。パスが存在しない場合は0にIF EXIST設定さERRORLEVELれないため、ERRORLEVEL通常のrm -rf使用を模倣する方法で成功を適切に検出するには、最初に0に設定する必要があります。RDIF EXISTRD異なりrm -f、を保護する必要があります。ターゲットが存在しない場合は、エラーがスローされます。

次のスクリプトスニペットは、DELPATHが事前に引用されていることを前提としています。(これは、のような場合に安全ですSET DELPATH=%1。スペースを入れECHO %1てa .cmdを入れて引数を渡してみて、自分に何が起こるかを確認してください)。スニペットが完了したら、で失敗を確認できますIF ERRORLEVEL 1

: # Determine whether we need to invoke DEL or RD or do nothing.
SET DELPATH_DELMETHOD=RD
PUSHD %DELPATH% 2>NUL
IF ERRORLEVEL 1 (SET DELPATH_DELMETHOD=DEL) ELSE (POPD)
IF NOT EXIST %DELPATH% SET DELPATH_DELMETHOD=NOOP
: # Reset ERRORLEVEL so that the last command which
: # otherwise set it does not cause us to falsely detect
: # failure.
CMD /C EXIT 0
IF %DELPATH_DELMETHOD%==DEL DEL /Q %DELPATH%
IF %DELPATH_DELMETHOD%==RD RD /S /Q %DELPATH%

ポイントは、環境がPOSIXに準拠しているだけの場合、すべてが簡単になるということです。または、最小限のMSYSをインストールしてそれを使用する場合。



3

ここにあなたがする必要があるのは...

次の行でバッチファイルを作成します。

RMDIR /S %1

バッチファイルを名前Remove.batを付けて保存し、C:\windows

次のレジストリキーを作成します

HKEY_CLASSES_ROOT\Directory\shell\Remove Directory (RMDIR)

regeditデフォルト値HKEY_CLASSES_ROOT\Directory\shell\Remove Directory (RMDIR)\default を起動して次の値で更新します

"c:\windows\REMOVE.bat" "%1"

それでおしまい!これで、任意のディレクトリを右クリックして、RMDIR関数を使用できます。


3

Powershell 5.1の使用

 get-childitem *logs* -path .\ -directory -recurse | remove-item -confirm:$false -recurse -force

ログを削除するディレクトリ名に置き換えます。

get-childitemは、現在のパス(。)から再帰的に名前が付けられた子ディレクトリを検索します。

remove-itemは結果を削除します。


2

GnuWin32をインストールして、ウィンドウで* nixコマンドをネイティブに使用できます。私はこれを他の何かをインストールする前にWindowsの新鮮なコピーにインストールします。:)


2

自己責任。「現状有姿」で提供される情報。広範囲にわたってテストされていません。

Windowsアイコン(通常は左下)を右クリックし、[Windows PowerShell(管理者)]をクリックします。次のコマンドを使用します(注意してください。注意しないと、すべてのファイルを簡単に削除できます)。

rd -r -include *.* -force somedir

somedir削除する空でないディレクトリはどこですか。

外部接続ディスクまたは問題のあるディスクでは、Windowsが奇妙な動作をする場合があることに注意してください。削除(またはコピー試行)でエラーは発生しませんが、指示どおりにディレクトリは削除(またはコピー)されません。(この場合、少なくとも私にとっては、彼の回答で@n_yによって与えられたコマンドが「get-childitem:ファイルまたはディレクトリが破損していて読み取り不能です」などのエラーがPowerShellで発生することがわかりました。)


1

Windowsマシンへのnpmパッケージのインストールに問題があり、「rm -rf...」コマンドが見つからないというエラーが表示された場合は、後で重要な回答があります。bash cliを使用して、Windowsでrmコマンドを実行できます。

npmユーザーのnpm config set script-shell "C:\Program Files\Git\bin\bash.exe"場合、インストールしようとしているnpmパッケージにコマンドを使用するポストインストールスクリプトがある場合、npmの設定をこのように変更できます。npmパッケージの内容を変更したり、無効にすることなくrm -rf、そのrmコマンドを実行できます。インストール後のスクリプト設定。(たとえば、インストール後のスクリプトでコマンドをstyled-components使用しますrm

rmコマンドだけを使用する場合は、bashを使用して引数を簡単に渡すことができます。

つまり、Windowsで「rm」コマンドを使用できます。


0

ここに私のために働いたものがあります:

パスの長さを短くしてみてください。ie ::そのようなファイルにつながるすべてのフォルダの名前を可能な限り小さい名前に変更します。1文字の名前を言ってください。フォルダ階層で上方向に名前を変更します。これにより、uはパスの長さを効果的に短縮します。最後に、すぐにファイルを削除してください。



弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.