web-dev-qa-db-ja.com

"rm -rf"はWindowsに相当しますか?

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

このためのビルド済みのツールはありますか、それとも私はそれを書く必要がありますか?

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

DELTREEはWindows 2000以降から削除されました

421
FlySwat

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

rd /s /q "path"

PowerShellを使用している場合はRemove-Itemdeleraserdrirm、およびrmdirにエイリアスがあります)を使用することができ、-Recurseに短縮できる引数-rを取ります。

rd -r "path"
584
Duncan Smart

管理者:

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

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

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

mkdir \empty
robocopy /mir \empty folder
128
wbkang

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

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

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

  • /Q静かなモード、/Sを使ってディレクトリツリーを削除してもよいかどうかを尋ねないでください

103
Jim McKeeth

あなたはcygwinをインストールすることができます、それはrmと同様にlsを持ちます。

18
user17481

パスに移動してこのコマンドを起動します。

rd /s /q "FOLDER_NAME"

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

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

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

17

ディレクトリを削除するには(存在するかどうかにかかわらず)、次のようにします。

if exist myfolder ( rmdir /s/q myfolder )
6
Clay

rmdir /S /Q %DIRNAME%

5
Branan

rmdir/s dirname

3
Brian Mitchell

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

del /s foldername
3
Jeremy Ruten

まず、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が返されることが予想される場所で0が一般的に使用されるシナリオは3つあります。

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

パーミッション全体を無視するつもりですが、とにかくパーミッションを使用したり、Windows上のものへの書き込みアクセスを拒否しようとしたりする人はいません(冗談であることを意味します…)。

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

次のスクリプトスニペットは、DELPATHが前引用符で囲まれていることを前提としています。 (これはSET DELPATH=%1のようなことをするときに安全です。ECHO %1.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
binki

これがあなたがする必要があるものです...

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

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機能を使用できるようになりました

2
Louis

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

2
epochwolf

受け入れられた答えは素晴らしいです、しかし、あなたがNodeをインストールしていると仮定すると、globライブラリパターンを可能にするノードライブラリ "rimraf"でこれをはるかに正確にすることができます。あなたがこれをたくさん使うのであれば(私はそうします)、ただグローバルにインストールしてください。

yarn global add rimraf

それから、例えば、私は常に使用するパターン:

rimraf .\**\node_modules

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

npx rimraf .\**\node_modules
1
Artif3x

ATあなた自身のリスクを使用してください。 「現状のまま」提供される情報。広範囲にテストされていません。

Windowsアイコンを右クリック(通常は左下)> [Windows PowerShell(Admin)]をクリック>このコマンドを使用します(注意していない場合は、すべてのファイルを簡単に削除できます)。

rd -r -include *.* -force somedir

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

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

1

powershell経由

 Remove-Item -Recurse -Force "TestDirectory"

コマンドプロンプト経由

https://stackoverflow.com/a/35731786/439130

0
cilerler

Powershell 5.1を使う

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

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

get-childitem は現在のパス(。)から再帰的に名前を持つchildrenディレクトリを検索します。

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

0
n_y

これは私のために働いたものです:

パスの長さを短くしてみてください。すなわち、::そのようなファイルにつながるすべてのフォルダーの名前を、できるだけ小さい名前に変更します。一文字の名前を言う。フォルダ階層の上に向かって名前の変更を続けます。これによって、経路長を効果的に減少させる。今すぐ最後にファイルをすぐに削除してみてください。

0