フォルダーとそのサブフォルダーからすべてのファイルを削除する


52

フォルダー構造からすべてのファイルを削除したいので、空のフォルダー構造が残っています。

これは、バッチまたはVBScriptのスクリプトで実現できますか?

非常に基本的なバッチコマンドを試しましたが、これにはユーザーが各ファイルの削除を許可する必要がありました。これは適切なソリューションではありませんでした。何百ものファイルがあり、時間の経過とともに大幅に増加するからです。

何を提案できますか?


再帰的な削除を意味しますか?これは実際に行うことができます。何かのようにrd /s /q "c:\folder a内のすべてのファイルとフォルダに再帰的削除を実行しますFolder A
Ramhound

私はできました、私はPowerShellでスクリプトを書く方法を知りませんが、以前にPowerShellスクリプトを実行しました。
BobJim

2
今こそ学習するのに最適な時期です。レガシーの目的でバッチおよびvbs構文を調査しますが、PSの学習により多くの時間を費やします。
MDMoore313

私はまだコードをチェックする機会がありませんでしたが、それはうまくいくと確信しています。戻ってきて、最初のクエリに対して最も適切な答えを選択します。
ボブジム14

@BigHomieの推奨を2回目にします。PowerShellを少し習っただけで、かなりきれいだと言わざるを得ません。今ではかなり頻繁に使用しています。
ベン14

回答:


75

これはPowerShellを使用して実現できます。

Get-ChildItem -Path C:\Temp -Include *.* -File -Recurse | foreach { $_.Delete()}

このコマンドは、で各子アイテムを取得し、各アイテムで$pathdeleteメソッドを実行し、非常に高速です。フォルダ構造はそのまま残ります。

拡張子のないファイルがある場合は、使用します

Get-ChildItem -Path C:\Temp -Include * -File -Recurse | foreach { $_.Delete()}

代わりに。

-FilePowerShell v2の後にパラメーターが追加された可能性があります。その場合は、

Get-ChildItem -Path C:\Temp -Include *.* -Recurse | foreach { $_.Delete()}

拡張子を持つファイルに対してトリックを行う必要があります。

動作しない場合は、Powershellの最新バージョンがあるかどうかを確認してください


1
それ-Include *.*-Include .、大きな違いではありません!:-)
MDMoore313 14

Get-ChildItemコマンド-Path D:\ EmptyThisFolder -Include -ファイル-Recurse | foreach {$
_。Delete

なぜ使用しています-Include .か?それが問題です。
MDMoore313 14

2
彼らは実装できませんpowershell --versionか?正の数字のバージョン番号を使用できませんか?ただクレイジーです。プログラムのバージョン番号を確認する方法についての質問に対する1300以上の賛成ですか?
トーマスウェラー

1
@demonicdaronは想定されていません。OPの質問は、フォルダー構造を保存することでした。
MDMoore313

25

短くてスイートのPowerShell。どのバージョンのPSが動作するかわからない。

Remove-Item c:\Tmp\* -Recurse -Force

2
素敵で簡単。受け入れられた答えがそうでなかった間、これはトリックをしました!
悪魔のような

これは受け入れられる回答である必要があります。rm *強制することは実際にはお勧めできませんので、入力するだけでも構いません(確認ダイアログには[はい]オプションがあります)。
Jガルシア

22

あなたはdelコマンドでそうすることができます:

dir C:\folder
del /S *

/Sスイッチは、再帰的にファイルだけを削除することです。


2
これはファイルを削除するだけで、フォルダは残しますか?
ボブジム14

5
はい。/Pオプションを追加して、それを確認するためにすべての削除を確認するように求めることができます。
フープ14

感謝します うまくいけば時間の節約になります!
BobJim

3
はい。また、隠しファイルやシステムファイルを削除する場合は、attrib -s -r -h Folder\*.* /s /d削除する前に行ってください。そして、許可にはtakeownコマンドを使用します。
ジェット14

2
また、/ Qを使用して、ワイルドカードを使用するときに確認を求めないようにすることができます。
アイラタン

4

元の質問の行間を読んで、使用できる代替BATCHコード行を提供できます。これを実行すると、60日以上経過したファイルのみが削除されます。これにより、スケジュールされたタスクにこれを配置でき、実行時にディレクトリ全体を吹き飛ばすのではなく、不要な余分なファイルを削除します。必要に応じて、60〜5日、または1日も変更できます。これはフォルダーを削除しません。

forfiles -p "c:\path\to\files" -d -60 -c "cmd /c del /f /q @path"

アイデアに感謝しますが、現在、「空にする」プロセスは非常に予定外のアドホックな時間枠で完了すると思います。ただし、将来のためにそのコードを保持します!乾杯
BobJim

タイトルには「フォルダーとそのサブフォルダーからすべてのファイルを削除する」と表示されているため、これは解決策ではありません。
アンデルスリンデン


3

PowerShellを使用して、単一のファイルまたはフォルダーを削除します。PowerShellでDeleteコマンドを実行する前に、削除するオブジェクトへのフルアクセスを持つアカウントでサーバーまたはPCにログインしていることを確認する必要があります。

例: http : //dotnet-helpers.com/powershell-demo/how-to-delete-a-folder-or-file-using-powershell/

PowerShellコマンドを使用してファイルを削除する

Remove-Item -Path "C:\ dotnet-helpers \ DummyfiletoDelete.txt"

上記のコマンドは、「C:\ dotnet-helpers」の場所にある「DummyfiletoDelete.txt」ファイルを実行して削除します。

PowerShellコマンドを使用してすべてのファイルを削除する

Remove-Item -Path "C:\ dotnet-helpers *。*"

PowerShellコマンドを使用してすべてのファイルとフォルダーを削除する

Remove-Item -Path "C:\ dotnet-helpers *。*" -recurse

-recurseドリルダウンして、さらに多くのファイルを見つけます。この–recurseパラメーターにより、PowerShellは許可を求めずにすべての子アイテムを削除できます。さらに、–forceパラメーターを追加して、隠しファイルまたは読み取り専用ファイルを削除できます。

-Forceコマンドを使用してファイルを強制的に削除する

PowerShellコマンドを使用してすべてのファイルを強制的に削除する

Remove-Item -Path "C:\ dotnet-helpers *。*" -Force


1

PowerShellを使用してこれを試してください。この例では、すべての.classファイルを削除します。

Get-ChildItem '.\FOLDERNAME' -include *.class -recurse | foreach ($_) {remove-item $_.FullName}

1
  1. Windowsエクスプローラーで、すべてのファイルとフォルダーを含むルートディレクトリを選択します。

  2. 検索する *

  3. タイプでソート(すべてのフォルダーが最上部に、すべてのファイルが下にリストされます)

  4. すべてのファイルを選択して、削除を押します。

これにより、すべてのファイルが削除され、ディレクトリ構造が保持されます。


1

現在のディレクトリとサブディレクトリからすべてのファイルを削除しますが、フォルダ構造は残します。

/Q)スイッチは、ユーザーが削除してもよいかどうかを尋ねるためのものです

注意/Q貴重なものを削除しないように、なしで試してください。

del /S * /Q 

1

これがIMOの最も簡単な方法です

ディレクトリにナビゲートオープンPowerShellを、( cd)、THEN

ls -Recurse * | rm

(失礼)すべてがなくなった...

特定の拡張子に基づいて削除する場合

ls -Recurse *.docx | rm

ls ディレクトリをリストしています

-Recurse powershellにサブディレクトリに移動するように指示するフラグです

* すべてを言います

*.doc .doc拡張子を持つすべて

| 出力を左から右に送ります

rm 削除する

他のすべての答えは、これを必要以上に混乱させるように見えます。


0
dir C:\testx\ -Recurse -File | rd -WhatIf
What if: Performing the operation "Remove File" on target "C:\testx\x.txt".
What if: Performing the operation "Remove File" on target "C:\testx\bla\x.txt".

-1

上記の回答の補足として、実際にはGet-Childitemを使用して、上記の回答の結果をパイプラインに渡す必要はありません。-IncludeキーワードがRemove-Itemコマンドに含まれているためです。

簡単にできます:

Remove-Item -Include " " "C:\ Temp" -Recurse

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