質問
フォルダーとその子を再帰的に削除する方法が必要です。
このための事前に構築されたツールはありますか、それとも作成する必要がありますか?
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
Quiet モードでは、ディレクトリ ツリーを削除してもよいかどうかを尋ねません。/S
cygwin をインストールできます。 rm
同様に ls
等
パスに移動して、このコマンドをトリガーします。
rd /s /q "FOLDER_NAME"
/s :指定されたディレクトリと、ファイルを含むすべてのサブディレクトリを削除します。ツリーを削除するには /s を使用します。
/q :rmdir を Quiet モードで実行します。確認なしでディレクトリを削除します。
/?:コマンドプロンプトにヘルプを表示します。
ディレクトリ (存在するかどうかに関係なく) を削除するには、次のコマンドを使用します。
if exist myfolder ( rmdir /s/q myfolder )
rmdir /S /Q %DIRNAME%
rmdir /s ディレクトリ名
次のコマンドを試してください。
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
3 つのシナリオがあります。 rm -rf
返されることが期待される場合によく使用されます 0
:
- 指定されたパスは存在しません。
- 指定されたパスは存在し、ディレクトリです。
- 指定されたパスは存在し、ファイルです。
アクセス許可のことはすべて無視するつもりですが、Windows ではアクセス許可を使用したり、書き込みアクセスを拒否しようとしたりする人はいません (OK、これは冗談です…)。
初め セット ERRORLEVEL
0まで 次に、パスが存在する場合にのみ、それがディレクトリであるかどうかに応じて異なるコマンドを使用してパスを削除します。 IF EXIST
設定しません ERRORLEVEL
パスが存在しない場合は 0 に設定します。 ERRORLEVEL
通常を模倣した方法で成功を適切に検出するには、最初に 0 にする必要があります。 rm -rf
使用法。を守っています RD
と IF EXIST
必要なので RD
, 、 とは異なり rm -f
, 、ターゲットが存在しない場合はエラーがスローされます。
次のスクリプト スニペットは、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 をインストールしてそれを使用する場合。
インストールできます GnuWin32 Windows 上で *nix コマンドをネイティブに使用します。Windows の新品のコピーに他のものをインストールする前に、これをインストールします。:)
ここであなたがしなければならないことは...
次の行でバッチファイルを作成します
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 関数を使用できるようになりました。
Powershell 5.1 の使用
get-childitem *logs* -path .\ -directory -recurse | remove-item -confirm:$false -recurse -force
交換する ログ 削除したいディレクトリ名を入力します。
子アイテムの取得 現在のパス (.) から名前の子ディレクトリを再帰的に検索します。
アイテムの削除 結果を削除します。
受け入れられた答えは素晴らしいですが、Nodeがインストールされていると仮定すると、グロビングパターンを可能にするノードライブラリ「rimraf」を使用してこれをより正確に行うことができます。これを頻繁に使用する場合は (私もそうしています)、グローバルにインストールしてください。
yarn global add rimraf
次に、たとえば、私が常に使用しているパターン:
rimraf .\**\node_modules
または、グローバル インストールを回避できるワンライナーの場合は、パッケージの動的ダウンロードに少し時間がかかります。
npx rimraf .\**\node_modules
これが私にとってうまくいったものです:
パスの長さを短くしてみてください。つまり::そのようなファイルにつながるすべてのフォルダーの名前を可能な限り小さい名前に変更します。名前を 1 文字で言います。フォルダー階層の上方向に名前を変更していきます。これにより、経路長が効果的に短縮されます。最後に、ファイルをすぐに削除してみます。
Powershell経由
Remove-Item -Recurse -Force "TestDirectory"
コマンドプロンプト経由
自己責任。情報は「現状のまま」提供されます。広範囲にわたるテストは行われていません。
Windows アイコン (通常は左下) を右クリックし、[Windows PowerShell (管理者)] をクリックし、次のコマンドを使用します (十分な注意を払ってください。注意しないと簡単にすべてのファイルを削除してしまう可能性があります)。
rd -r -include *.* -force somedir
どこ somedir
は、削除する空ではないディレクトリです。
外付けディスク、または問題のあるディスクでは、Windows が奇妙な動作をする場合があることに注意してください。削除 (またはコピー試行) ではエラーが発生しませんが、指示どおりにディレクトリが削除 (またはコピーされません) されません。(この場合、少なくとも私にとっては、@n_y が回答で指定したコマンドは 'get-childitem : のようなエラーを生成することがわかりました。ファイルまたはディレクトリは破損しており、読み取れません。その結果、PowerShell)
古いバージョンの Windows を使用している場合は、deltree もあります。
コマンドを見つけるにはこのサイトがとても気に入っています。SS64:Del - ファイルの削除
del /s /q ディレクトリは削除されます