フォルダとその子を再帰的に削除する方法が必要です。
このためのビルド済みのツールはありますか、それとも私はそれを書く必要がありますか?
DEL /S
はディレクトリを削除しません。
DELTREE
はWindows 2000以降から削除されました
従来のコマンドプロンプト(cmd.exe)を使用している場合は、RMDIRまたはRD:
rd /s /q "path"
PowerShellを使用している場合はRemove-Item
(del
、erase
、rd
、ri
、rm
、およびrmdir
にエイリアスがあります)を使用することができ、-Recurse
に短縮できる引数-r
を取ります。
rd -r "path"
管理者:
takeown /r /f folder
cacls folder /c /G "ADMINNAME":F /T
rmdir /s folder
Sysファイルを含むあらゆるものに対応
編集:私は実際にもあまりにも長いファイルパスの問題も解決する最善の方法を見つけました:
mkdir \empty
robocopy /mir \empty folder
RMDIR [/S] [/Q] [drive:]path
RD [/S] [/Q] [drive:]path
/S
ディレクトリ自体に加えて、指定されたディレクトリ内のすべてのディレクトリとファイルを削除します。 ディレクトリツリーを削除するために使用されます。
/Q
静かなモード、/S
を使ってディレクトリツリーを削除してもよいかどうかを尋ねないでください
あなたはcygwinをインストールすることができます、それはrm
と同様にls
を持ちます。
パスに移動してこのコマンドを起動します。
rd /s /q "FOLDER_NAME"
/ s:指定されたディレクトリとファイルを含むすべてのサブディレクトリを削除します。ツリーを削除するには/ sを使います。
/ q:rmdirをクワイエットモードで実行します。確認なしにディレクトリを削除します。
/? :コマンドプロンプトにヘルプを表示します。
ディレクトリを削除するには(存在するかどうかにかかわらず)、次のようにします。
if exist myfolder ( rmdir /s/q myfolder )
rmdir /S /Q %DIRNAME%
rmdir/s dirname
このコマンドを試してください。
del /s foldername
まず、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つあります。
パーミッション全体を無視するつもりですが、とにかくパーミッションを使用したり、Windows上のものへの書き込みアクセスを拒否しようとしたりする人はいません(冗談であることを意味します…)。
最初に ERRORLEVEL
を0 に設定し、次にパスが存在する場合にのみ削除します。ディレクトリであるかどうかに応じて異なるコマンドを使用します。パスが存在しない場合、IF EXIST
はERRORLEVEL
を0に設定しません。そのため、通常のrm -rf
の使用方法を模倣して成功を正しく検出するには、最初にERRORLEVEL
を0に設定する必要があります。 IF EXIST
でRD
を保護することは必要です。なぜなら、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をインストールしてそれを使うだけの場合もあります。
これがあなたがする必要があるものです...
次の行を使ってバッチファイルを作成します。
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機能を使用できるようになりました
GnuWin32 をインストールして、Windowsでネイティブに* nixコマンドを使用することができます。私は窓の真新しい新鮮なコピーに何か他のものをインストールする前にこれをインストールします。 :)
受け入れられた答えは素晴らしいです、しかし、あなたがNodeをインストールしていると仮定すると、globライブラリパターンを可能にするノードライブラリ "rimraf"でこれをはるかに正確にすることができます。あなたがこれをたくさん使うのであれば(私はそうします)、ただグローバルにインストールしてください。
yarn global add rimraf
それから、例えば、私は常に使用するパターン:
rimraf .\**\node_modules
あるいは、グローバルインストールを回避することができますが、パッケージの動的ダウンロードには少し時間がかかります。
npx rimraf .\**\node_modules
ATあなた自身のリスクを使用してください。 「現状のまま」提供される情報。広範囲にテストされていません。
Windowsアイコンを右クリック(通常は左下)> [Windows PowerShell(Admin)]をクリック>このコマンドを使用します(注意していない場合は、すべてのファイルを簡単に削除できます)。
rd -r -include *.* -force somedir
somedir
は、削除する空でないディレクトリです。
外部接続ディスクまたは問題のあるディスクでは、Windowsが奇妙な動作をする場合があることに注意してください-削除(またはコピー試行)でエラーは発生しませんが、指示どおりにディレクトリは削除されません(またはコピーされません)。 (この場合、少なくとも私にとっては、彼の答えで@n_yによって与えられたコマンドは、PowerShellの結果として「get-childitem:ファイルまたはディレクトリが破損していて読めない」などのエラーを生成することがわかりました)
powershell経由
Remove-Item -Recurse -Force "TestDirectory"
コマンドプロンプト経由
Powershell 5.1を使う
get-childitem *logs* -path .\ -directory -recurse | remove-item -confirm:$false -recurse -force
logs を削除するディレクトリ名に置き換えます。
get-childitem は現在のパス(。)から再帰的に名前を持つchildrenディレクトリを検索します。
remove-item 結果を削除します。
これは私のために働いたものです:
パスの長さを短くしてみてください。すなわち、::そのようなファイルにつながるすべてのフォルダーの名前を、できるだけ小さい名前に変更します。一文字の名前を言う。フォルダ階層の上に向かって名前の変更を続けます。これによって、経路長を効果的に減少させる。今すぐ最後にファイルをすぐに削除してみてください。