PowerShellを使用してフォルダーまたはファイルを削除する方法

2021年8月18日 10262 ビュー PowerShellを使用してフォルダーまたはファイルを削除する方法

PowerShellを使用してファイルとフォルダーを削除したいのですが、方法がわかりませんか?この記事では、PowerShellを使用して、指定したパスにあるフォルダー、ファイル、またはすべてのフォルダーとファイルを削除する方法について、手順を追って説明します。





このブログ投稿では、PowerShellを使用してフォルダーとファイルを削除するさまざまな方法について説明しています。これが面白そうだと思えば、読み続けてください!



このガイドは、PowerShellを使用してフォルダーとファイルを削除する2つの方法を説明することから始まります。次に、2番目のセクションでは、PowerShellを使用したファイルとフォルダーの削除に関連する一般的なエラーを修正する方法を学習します。

最後に、ガイドには20以上の例があります。



投稿トピックを閲覧する



PowerShellを使用してフォルダーまたはファイルを削除する2つの方法

PowerShellには、アイテムを削除する2つの方法があります。 PowerShellの削除方法を使用してフォルダーまたはファイルを削除できます。

次に、Remove-Itemを使用してPowerShellのアイテムを削除できます。このセクションの次の2つのサブセクションでは、これらの方法の使用方法を学習します。



方法1:Powershellを使用する 消去() フォルダまたはファイルを削除する方法

PowerShellでフォルダーを削除するには、Get-ChidItemコマンドレットが必要です。 Get-ChildItem Cmdletは、指定された場所にあるアイテムと子アイテムを返します。



パス内のすべてのファイルとフォルダを一覧表示するには E:レポート 、以下のコマンドを実行します。

Get-ChildItem E:
eports

これがPowerShellでの結果です…

Powershell Delete()の使用方法

このコマンドには、というメソッドがあります 消去 。あなたは使用することができます 消去 フォルダとファイルを削除する方法。

フォールアウト4で視野を変更する方法

上記のコマンドで使用可能なメソッドを確認するには、コマンドをGet-Memberコマンドレットにパイプします。

Get-ChildItem E:
eports | Get-Member

このコマンドは、2種類のプロパティを返しました。 1 、 System.IO.DirectoryInfo (下の最初の画像を参照してください)。 2 、 System.IO.FileInfo 。 1つ目はパス内のフォルダーに関連し、2つ目はファイルに関連します。

2つの画像をよく見てください。それらのそれぞれにと呼ばれるメソッドがあることに注意してください 消去 。あなたは使用することができます 消去 PowerShellでフォルダーまたはファイルを削除するメソッド。

次のサブセクションでは、使用方法を示します 消去 方法。

使い方 消去 ()フォルダまたはファイルを削除するPowershellのメソッド

の構文 消去 方法は次のとおりです。

Object.Delete()

物体 Get-ChidItemコマンドレットによって返されるファイルの詳細のフォルダーです。さらに、 消去 通常、メソッドの後に()演算子が続きます。

上記の構文コマンドを理解しやすくするために、ここに元のGet-ChildItemコマンドがあります。

Get-ChildItem E:
eports

そしてその結果…

Powershell Delete()の使用方法

これまでに説明した内容に基づいて、理論的には、PowerShell Deleteメソッドを使用して、次のコマンドを実行することにより、レポートと呼ばれるフォルダーを削除できます。

(Get-ChildItem E:
eports).Delete()

ただし、最後のコマンドはエラーメッセージを返します。ディレクトリは空ではありません。

この問題を解決するには、パス内のすべてのファイルとフォルダー、およびサブフォルダーを返すコマンドが必要です。次に、結果をaForEachループにパイプする必要があります。

変更されたコマンドは次のとおりです。

Get-ChildItem E:
eports -Include *  .  * -Recurse | ForEach { $_.Delete()}

これがPowerShellのコマンドです。指定されたパスからすべてのファイルが削除されました。

最後のコマンドは、指定されたフォルダーとそのサブフォルダー内のファイルを削除します。ただし、フォルダは削除されません。

フォルダを削除するには、次のコマンドを実行します。

Get-ChildItem E:
eports | ForEach { $_.Delete()}

それを確認するには E:レポート 空になったら、Get-ChildItemコマンドを再度実行します。

Get-ChildItem E:
eports

何も返されません!

次のセクションに進む前に、このコマンドがすべてのファイルとサブフォルダーを削除する方法を説明しましょう。

Get-ChildItem E:
eports -Include *  .  * -Recurse | ForEach { $_.Delete()}

Get-ChildItemには、次の2つのパラメーターがあります。 含む と 再帰 。コマンドでは、私は使用しました -含む *。* 結果にすべてのファイルを含めるようにPowerShellに指示します。

再帰 一方、Get-ChildItemは、すべてのフォルダーとサブフォルダーを返すように指示します。

コマンドの2番目の部分では、Get-ChildItemをForEachステートメントに追加しました。 ForEachは、Get-ChildItemによって返されるすべてのオブジェクトをループし、 消去 それらを削除する方法。

このセクションを紹介したときにすでに述べたように、PowerShellには次のコマンドレットがあります。 削除-アイテム 具体的には。このPowerShellコマンドレットを使用して、フォルダーまたはファイルを削除することもできます。

次のセクションでは、使用方法について説明します 削除-アイテム 。私の経験では、 削除-アイテム 使用するよりも優れています 消去() 方法。

方法2:Powershellを使用する 削除-アイテム フォルダまたはファイルを削除するコマンドレット

でファイルまたはフォルダを削除するには 削除-アイテム それでも、PowerShellコマンドレットのGet-ChildItemを使用する必要があります。次に、結果をにパイプします 削除-アイテム 。

あなたが実行することができます 削除-アイテム それなし Get-ChildItem 。ただし、私の経験から、ほとんどの状況では、アイテムを次のようにリストするのが最適です。 Get-ChildItem 。次に、出力をにパイプします 削除-アイテム 。

このセクションの最初の例では、PowerShellを使用してITGServer2というフォルダーを削除します。以下のスクリーンショットを参照してください。

方法2:PowershellRemove-Itemコマンドレットを使用してフォルダーまたはファイルを削除する

フォルダを削除するPowerShellコマンドは次のとおりです…

Get-ChildItem E:
eports -Recurse -Filter 'ITGServer2' | Remove-Item -Force -Recurse

上記のコマンドを実行すると、フォルダがなくなります。

方法2:PowershellRemove-Itemコマンドレットを使用してフォルダーまたはファイルを削除する

2番目の例では、E: reportsのフォルダーとサブフォルダーを削除します。以下のコマンドは仕事をします…

 Get-ChildItem E:
eports -Recurse | ForEach { Remove-Item $_.FullName -Force -Recurse } 

最後のコマンドを実行すると、指定したフォルダー内のすべてのフォルダーがなくなります。

方法2:PowershellRemove-Itemコマンドレットを使用してフォルダーまたはファイルを削除する

Powershellのフォルダまたはファイルの削除で一般的なエラーを修正する方法

Powershellのフォルダまたはファイルの削除で一般的なエラーを修正する方法

Remove-Item PowerShellコマンドを実行してフォルダーまたはファイルを削除すると、エラーが返される場合があります。このセクションでは、これらのエラーの一部とその修正方法について説明します。

PowerShellを使用してフォルダーやファイルを削除する方法の実際のシステム管理者の例に飛び込む前に、これらの一般的なエラーの解決策について話し合う方がよいと思います。

Powershellの削除フォルダーまたはファイルアクセス拒否エラーを修正する方法

Remove-Itemを実行してファイルまたはフォルダーを削除し、Access Deniedエラーメッセージが表示された場合は、次のことを試してください。

  1. ファイルまたはフォルダーの所有者を変更する–以下のコードを使用して、ファイルまたはフォルダーの所有者をローカル管理者に変更します

このコマンドを実行するには、管理者としてPowerShellを開きます。そうしないと、最後のコマンドが失敗します。

$CurrentACL = Get-ACL F:ITGFilesTextfiles $AdminGroup = New-Object System.Security.Principal.NTAccount('Builtin', 'Administrators') $CurrentACL.SetOwner($AdminGroup) Set-Acl -Path F:ITGFilesTextfiles -AclObject $CurrentACL
フォルダパスF: ITGFiles Textfilesをファイルまたはフォルダのフルパスに変更します

所有者をローカル管理者に変更したら、PowerShellを使用してファイルまたはフォルダーの削除を再度実行してみてください。うまくいかない場合は、これらの修正を試してください。

  1. 追加します 力 Remove-Itemのパラメータ
  2. 代わりにDelete()メソッドを試してください。 PowerShellのDelete()メソッドの使用方法がわからない場合は、このガイドの「PowershellでDelete()メソッドを使用してフォルダーまたはファイルを削除する(リンクは別のブラウザータブで開きます)」セクションを参照してください。

空のエラーではないため、Powershell削除フォルダーを削除できない問題を修正する方法

コマンドを実行したときに空のエラーではないため、受信した場合は削除できません。

Remove-Item E:
eports -Recurse

Get-ChildItemをRecurseパラメーターとともに使用してみてください。次に、それをRemove-Itemにパイプします。 力 と 再帰 パラメーター。

サンプルコマンドは次のとおりです。

 Get-ChildItem E:
eports -Force -Recurse | Remove-Item -Force -Recurse

または、Get-ChildItemを実行して、パスの最後のスラッシュの後ろにアスタリスクを指定することもできます。これにより、フォルダのすべてのコンテンツが削除されます。

たとえば、コマンドを実行すると…

Remove-Item E:
eports -Force -Recurse

…そして、receiveは空ではないため削除できません。問題を解決するには、最初に以下のコマンドを実行します。

 Get-ChildItem E:
eports* -Force -Recurse | Remove-Item -Force -Recurse

最後のコマンドは、E: reports内のアイテムのみを削除します。最後に、フォルダ(現在は空です)を削除するには、次のコマンドを実行します…

Remove-Item E:
eports -Force -Recurse

別のプロセスエラーによって使用されるPowershell削除フォルダーを修正する方法

PowerShellの削除フォルダーを修正する方法

Remove-Itemを受け取った場合、それが別のプロセスによって使用されているためにエラーメッセージが返される場合は、Forceパラメーターを含める必要があります。

これがエラーメッセージを返したオリジナルです…

Get-ChildItem E:
eportsfolder-names.txt | Remove-Item

この問題を修正するには、ファイルに対して以下のコマンドを実行します。

Get-ChildItem E:
eportsfolder-names.txt | Remove-Item -Force -Recurse

最後のコマンドでファイルが正常に削除されました…

Powershellの削除フォルダまたはファイルフォルダまたはファイル名が長すぎるエラーを修正する方法

これは、PowerShellの既知の制限のようです。

ただし、この問題を解決するには、 あなたへ cmdコマンド。次に、結果をRemove-Itemコマンドにパイプします。

ここに例があります…

dir 'E:
eports
eports - Copy
eports - Copy
eports - Copy
eports - Copy
eports - Copy
eports - Copy
eports - Copy
eports - Copy' | Remove-Item -Force -Recurse
dirコマンドは、PowerShellのGet-ChildItemに相当するcmdです。

パスへのPowershell削除フォルダーアクセスを修正する方法が拒否されましたエラー

PowerShellのRemove-Itemコマンドは、削除する権限がないフォルダーを削除しようとすると、[パスへのアクセスが拒否されました]エラーメッセージをスローします。

このエラーメッセージが表示される理由は、フォルダにアクセスできないためです。 Remove-Itemコマンドを実行する前に、次のコマンドを実行して、ローカル管理者にフォルダーへのアクセスを許可します。

この修正は、ログインに使用したアカウントがローカルのAdministratorsグループのメンバーであることを前提としています。 PowerShell ISEで以下のコマンドを実行する前に、パスF: ITGFiles Textfilesを削除しようとしているフォルダーパスに変更します。
$CurrentACL = Get-ACL F:ITGFilesTextfiles  
$AccessRule = New-Object System.Security.AccessControl.FileSystemAccessRule('BUILTINAdministrators','FullControl','Allow')
$CurrentACL.SetAccessRule($AccessRule)
$CurrentACL | Set-Acl F:ITGFilesTextfiles

上記のスクリプトの実行が終了したら、Remove-Itemコマンドを再実行します。

その他のPowershell削除フォルダーまたはファイルの例

その他のPowershell削除フォルダーまたはファイルの例

ガイドのこの最後のセクションでは、PowerShellを使用してファイルまたはフォルダーを削除する方法の複数の例について説明します。

PowerShellが存在する場合にPowerShellを使用してフォルダーまたはファイルを削除する方法

この例には、フォルダーまたはファイルが存在する場合の条件があるため、コマンドの最初のパスは、アイテムが存在するかどうかを確認します。

あなたは使用することができます テストパス フォルダまたはファイルが存在するかどうかを確認するコマンド。次に、IF条件ステートメントを使用して、フォルダーまたはファイルが存在する場合はそれを削除します。

IFステートメントブロックで両方のコマンドを組み合わせることができます…

この例では、パスF: ITGFiles TextfilesにあるITGServerというフォルダーを削除します(フォルダーが存在する場合)。

これがコマンドです…

IF (Test-Path F:ITGFilesTextfilesITGServer) { Remove-Item F:ITGFilesTextfilesITGServer } Else { Write-Host 'The folder F:ITGFilesTextfilesITGServer does not exist' }

この例では、このフォルダが存在するため、削除されました。ただし、存在しないファイルでコマンドを実行しようとすると、次のメッセージが表示されます。 それ以外 IFステートメントのブロック。

PowerShellを使用してフォルダーとそのサブフォルダーを削除する方法

フォルダとすべてのサブフォルダを削除するには、 削除-アイテム とのコマンド 再帰 と 力 パラメーター。

ここに例があります…

Remove-Item F:ITGFilesTextfilesITGServer -Recurse -Force

PowerShellを使用してx日より古い(または日付に基づく)フォルダーまたはファイルを削除する方法

この例では、x日より古いファイルまたはフォルダーを削除するため、最初のステップは日数の参照を取得することです。これは、Get-Dateコマンドを使用して実行されます。

ただし、x日より古いアイテムを削除するため、x日を負の値として指定する必要があります。たとえば、7日より古いすべてのファイルまたはフォルダーを削除するには、次のコマンドを使用して日数の参照を取得します。

$DaysRef = (Get-Date).AddDays('-7')

次に、 Get-ChildItem 取得するコマンド LastWriteTime アイテムのプロパティ。 The LastWriteTime プロパティは、フォルダまたはファイルが最後に変更された日付を記録します。

に加えて LastWriteTime プロパティ、Get-ChildItemコマンドは、と呼ばれる別のプロパティを返します PSIsContainer 。 PSIsContainerプロパティは、ファイルとフォルダーを区別します。

もしも PSIsContainer trueの場合、アイテムがフォルダであることを意味します。一方、 PSIsContainer falseの場合、アイテムがファイルであることを意味します。

LastWriteTimeプロパティを紹介する前に、まずGet-ChildItemコマンドを実行し、PSIsContainerプロパティでフィルタリングします。

Get-ChildItem F:ITGFilesTextfiles | Where-Object {$_.PSIsContainer -eq $TRUE}

このコマンドは、という単一のオブジェクトを返しました ITG これは、パスF: ITGFiles Textfiles内の唯一のフォルダーであるためです。

または、パス内のファイルのみを一覧表示するには、次のコマンドを実行します。

Get-ChildItem F:ITGFilesTextfiles | Where-Object {$_.PSIsContainer -eq $FALSE}

今回はで指定したので $ _。PSIsConta 降りる -eq $ FALSE 、PowerShellはすべての非フォルダーを返します。

フォルダまたはフォルダ内のファイルを一覧表示する方法を理解したので、LastWriteTimeプロパティを紹介しましょう。前述したように、アイテムが最後に変更された日時は、LastWriteTimeプロパティに記録されます。

これらのコマンドには、LastWriteTimeプロパティが含まれています。

Get-ChildItem F:ITGFilesTextfiles | Where-Object {$_.PSIsContainer -eq $TRUE -AND $_.LastWriteTime -le $DaysRef}  
Get-ChildItem F:ITGFilesTextfiles | Where-Object {$_.PSIsContainer -eq $FALSE -AND $_.LastWriteTime -le $DaysRef}

最初のコマンドは、$ DaysRef変数に保存された日の参照の前に最後に変更されたすべてのフォルダーを返します。この例では、日の参照は7日です。

逆に、2番目のコマンドは、過去x日間に変更されたすべてのファイルを返します。この例では、x日は7に相当します。

PowerShellを使用してx日より古いファイルのフォルダーを削除する、この例の2番目の最後の段階は、Where-ObjectコマンドをRemove-Itemにパイプすることです。

以下のスクリプトは、ファイルとフォルダを削除するタスクを完了します…

Get-ChildItem F:ITGFilesTextfiles | Where-Object {$_.PSIsContainer -eq $TRUE -AND $_.LastWriteTime -le $DaysRef} | Remove-Item -Recurse -Force  
Get-ChildItem F:ITGFilesTextfiles | Where-Object {$_.PSIsContainer -eq $FALSE -AND $_.LastWriteTime -le $DaysRef} | Remove-Item -Recurse -Force
LastWriteTime基準を満たすファイルまたはフォルダーがない場合、何も削除されません。

PowerShellを使用してフォルダーの内容のみを削除する方法

この例では、F: ITGFiles folderのコンテンツを削除しますが、フォルダー自体は削除しません。

フォルダの内容のみを削除し、フォルダを保持する場合は、次の例に示すように、Remove-Itemコマンドを実行します。

Remove-Item F:ITGFilesfolder* -Recurse -Force

秘訣は、フォルダパスの最後の最後のスラッシュの後にアスタリスクを追加することです。

The 再帰 パラメータは、指定されたパス内のすべてのフォルダとサブフォルダを削除します。この例では、F: ITGFiles folder *

PowerShellを使用して、確認やプロンプトなしでフォルダーとコンテンツを削除する方法

確認を求めずにフォルダとコンテンツを削除する秘訣は、 力 と 確認:$ false パラメータ 削除-アイテム 指図。

追加せずに以下のコマンドを実行すると 確認:$ false パラメータ、フォルダとそのすべての内容を削除したいことを確認する場合があります。

Remove-Item E:
eports -Recurse -Force

ただし、この確認プロンプトを受け取りたくない場合は、Confirm:$ falseパラメーターを含めます。

Remove-Item E:
eports -Force -Recurse -Confirm:$false

コマンドは、アクションの確認を求めずに実行する必要があります。また、確認プロンプトを停止するパラメータは次のとおりです。 確認:$ false 。

それでも最後のコマンドで確認を求められる場合は、最初に Get-ChildItem 指図。次に、以下に示すように、出力をRemove-Itemコマンドにパイプします。

Get-ChildItem -Path E:
eports | Remove-Item -Force -Recurse -Confirm:$false

残念ながら、最後のコマンドは親フォルダフォルダを削除しません。親フォルダーとそのすべてのコンテンツを削除するには、次のコマンドに示すように、Get-ChildItemコマンドに-filterパラメーターを追加します。

Get-ChildItem -Path E:
eports -Filter 'folder' | Remove-Item -Force -Recurse -Confirm:$false

PowerShellを使用してフォルダまたはファイルを削除してごみ箱をリサイクルする方法

Remove-Itemコマンドを使用してフォルダーまたはファイルを削除すると、それらは完全に削除されます。つまり、フォルダはごみ箱に移動されません。

残念ながら、ごみ箱にフォルダまたはファイルを削除するPowerShellコマンドレットはありません。このタスクのカスタム関数を作成しようとしていました。しかし、私はによって作成された既存の関数を見つけました stackoverflow.com 寄稿者。

読者が利用できるようにするために、関数のコピーをSゾーンにアップロードしました。この機能をダウンロードして使用するには、以下の手順に従ってください。

  1. ダウンロードRemove-ItemToRecycleBin.zipをクリックして、関数をダウンロードします
  2. 次に、ダウンロードしたzipファイルを解凍します。ファイルを解凍すると、Remove-ItemToRecycleBinというフォルダーが作成されます。
  3. 最後に、フォルダーをWindows 10PowerShellプロファイルmoulduleフォルダーにコピーします。フォルダは以下のパスにあります
C:Users\DocumentsWindowsPowerShellModules
Windows10プロファイル名です。これは通常、C: Users にあります。ただし、ドライブCにない場合は、ドライブDまたはEを確認してください。

モジュールフォルダーをモジュールフォルダーにコピーすると、他のPowerShellコマンドと同じように使用できます。それがどのように機能するかを説明するために、E: reportsをごみ箱に削除します。

ただし、コマンドを実行する前に、空のごみ箱のスクリーンショットを示します。

PowerShellを使用してフォルダまたはファイルを削除してごみ箱をリサイクルする方法

ここで、PowerShellを使用してフォルダE: reportsをごみ箱に削除するには、次のコマンドを実行します。

Remove-ItemToRecycleBin -LiteralPath E:
eports

上記のコマンドを実行すると、レポートフォルダがごみ箱に移動します。以下のスクリーンショットを参照してください…

PowerShellを使用してフォルダーまたはファイルを削除し、他のフォルダーまたはファイルを除外する方法

Remove-Itemコマンドには 除外する パラメータ。このパラメーターは、削除したくないフォルダーまたはファイルを除外するために使用されます。

これが例です。パスF: ITGFiles Textfiles5内のすべてのフォルダーを削除したい。ただし、folder3を削除したくありません。

PowerShellを使用してフォルダーまたはファイルを削除し、他のフォルダーまたはファイルを除外する方法

上のスクリーンショットからわかるように、フォルダーにはフォルダーとファイルの両方があります。

フォルダのみを削除するには、最初にGet-ChildItemコマンドを使用して、パス内のすべてのアイテムを一覧表示する必要があります。次に、出力をWhere-Objectにパイプし、PSIsContainerプロパティでフィルタリングします。

Get-ChildItem F:ITGFilesTextfiles5 | Where-Object {$_.PSIsContainer -eq $TRUE} | Remove-Item -Recurse -Force -Exclude 'folder3'

最後のコマンドを実行すると、すべてのフォルダーが削除されますが、folder3は削除されません。また、F: ITGFiles Textfiles5のファイルが削除されていないことに気づきました。

フォルダのみが削除された理由は、 Where-Object ブロック、{$ _。PSIsContainer-eq $ TRUE}でフィルタリングしました。 PSIsContainerプロパティは、オブジェクトがフォルダーであることを指定します。

次に進むと、Remove-ItemにはIncludeというパラメーターもあります。このパラメーターは、Excludeパラメーターとは逆のアクションを実行します。

ExcludeをIncludeに置き換えることで、最後のコマンドと同じ結果を得ることができます。ただし、前のコマンドとは異なり、削除するフォルダーを一覧表示します。

これは、F: ITGFiles Textfiles5からfolder1だけを削除するサンプルコマンドです。

Get-ChildItem F:ITGFilesTextfiles5 | Where-Object {$_.PSIsContainer -eq $TRUE} | Remove-Item -Recurse -Force -Include 'folder1'

前のコマンドを実行すると、folder1のみが削除されたことがわかります。

フォルダではなくファイルを削除する場合は、$ _。PSIsContainer-eq $ TRUEを$ _。PSIsContainer-eq $ FALSEに変更します。

空でない場合でもPowerShellを使用してフォルダーを削除する方法

PowerShellを使用してフォルダーを削除する場合は、フォルダーが空でない場合でも、 力 と 再帰 パラメーター。これが例です。

Remove-Item F:ITGFilesTextfiles5 -Recurse -Force

PowerShellを使用してX日より古い空のフォルダーを削除する方法

以下の手順に従って、PowerShellを使用してx日より古い空のフォルダーを削除します…

この例では、Windows 10プロファイルC: Users VictorAから90日より古いフォルダーを削除します。

  1. Get-ChildItemsを使用して、指定したパス内のフォルダーのみを一覧表示します。
Get-ChildItem -Path C:UsersVictorA -Directory

このコマンドは、指定されたパス内のすべてのフォルダーを一覧表示します。このガイドの以前のコマンドで、フォルダを返すために、 Where-Object フィルタリングする PSIsContainer 財産。しかし、私は同じ結果を使用して達成することにしました ディレクトリ のパラメータ Get-ChildItem 。

  1. 次に、Get-ChildItemコマンドの結果をWhere-Objectにパイプします。 Where-Objectコマンド内に、空のフォルダーのみを返すフィルターを追加します。これがコマンドです…
Get-ChildItem -Path C:UsersVictorA -Directory | Where-Object { $_.GetFileSystemInfos().Count -eq 0 }
  1. ここで、90日以上前のリストのフォルダーを返すパスを追加する必要があります。これには2つのコマンドが含まれます。

最初のコマンドでは、Get-Dateを使用して期間の日付を決定します。この例では、90日前です。簡単にするために、結果を$ DaysRefという変数に保存します。

$DaysRef = (Get-Date).AddDays('-30')

次に、2番目のコマンドで、最後のコマンドのWhere-Object部分に別のフィルターを含めます。

Get-ChildItem -Path C:UsersVictorA -Directory | Where-Object { ($_.GetFileSystemInfos().Count -eq 0) -AND ($_.LastWriteTime -le $DaysRef) }

これが最後のコマンドの結果です…

PowerShellを使用してX日より古い空のフォルダーを削除する方法

ご覧のとおり、最後のコマンドで返される空のフォルダーは2つだけです。私は2021年8月4日にこのコマンドを実行しました。ご覧のとおり、 LastWriteTime 2つのフォルダのうち16/06/202116:29です。

米国の読者の場合、この日付は2021年8月16日(2021年6月16日)です。

これは、2つのフォルダーが最後に変更されたのは、コマンドを実行してから90日以上経過していることを意味します。

  1. 最後に、90日より古いこれらの空のフォルダーを削除するには、最後のコマンドをRemove-ItemPowerShellコマンドにパイプします。
Get-ChildItem -Path C:UsersVictorA -Directory | Where-Object { ($_.GetFileSystemInfos().Count -eq 0) -AND ($_.LastWriteTime -le $DaysRef) } | Remove-Item -Force -Recurse

PowerShellを使用してユーザープロファイルフォルダーを削除する方法

このセクションのコマンドを使用してユーザープロファイルフォルダを削除するには、次のことを行う必要があります。 管理者としてPowerShellを開く 。そうしないと、アクセス拒否のエラーメッセージが表示される場合があります

PowerShellを使用してユーザーのプロファイルフォルダーを削除する最初の手順は、ユーザーのフォルダーへのパスを決定することです。 PowerShellには、Windowsインストールディレクトリへのパスを返す環境変数があります。

変数は…

$Env:WinDir

このコマンドは、C: WINDOWSのようなパスを返します。一方、Usersフォルダー(すべてのユーザープロファイルフォルダーを含む)は、Windowsがインストールされているドライブのルートにあります。

私の例では、UsersフォルダーはドライブC: WINDOWSにあります。

ただし、C: WINDOWSからC:を返すには、次のコマンドに示すように、splitメソッドを使用します。

($Env:WinDir).Split('')

このコマンドはC:とWINDOWSを返します。次のステップはCを返すことです:–これは配列の最初の項目です。

PowerShellを使用してユーザープロファイルフォルダーを削除する方法

このアイテムにアクセスするには、以下に示すように、この[0]を最後のコマンドに含めます。

(($Env:WinDir).Split(''))[0]

これで、C:ができました

PowerShellを使用してユーザープロファイルフォルダーを削除する方法

すべてのユーザープロファイルはUsersフォルダーにあることを前述しました。最後のコマンドから、戻り値のC: Usersに Usersを追加します

(($Env:WinDir).Split(''))[0] + 'Users'

これで、Usersフォルダーへのフルパスができました。

次のコマンドでは、Get-ChildItemを使用して、Usersフォルダー内のすべてのユーザープロファイルフォルダーを一覧表示します。ただし、エラーを回避するために、最初に最後のコマンドを変数に保存します。

$UsersFolder = (($Env:WinDir).Split(''))[0] + 'Users'

これで、Get-ChildItemを使用して、Usersフォルダー内のすべてのユーザープロファイルフォルダーを返すことができます。コマンドは次のとおりです。

Get-ChildItem $UsersFolder

そして、PowerShellでの結果…

PowerShellを使用してユーザープロファイルフォルダーを削除する方法

最後のビットは、最後のコマンドをRemove-Itemにパイプすることです。ただし、削除するユーザープロファイルフォルダーのみを削除するには、Filterパラメーターを使用する必要があります。

この例では、victoというユーザープロファイルフォルダーとそのすべてのサブフォルダーを削除します。

分割画面のAndroidを無効にする

PowerShellを使用してユーザープロファイルフォルダーを削除する最後のコマンドは次のとおりです。

Get-ChildItem $UsersFolder -Filter 'victo' | Remove-Item -Force -Recurse

このコマンドを実行した後、以下のコマンドを実行すると、削除されたプロファイルは表示されなくなります。

Get-ChildItem $UsersFolder

PowerShellを使用してAppdataからフォルダーを削除する方法

PowerShellには、ログオンしたユーザーのAppDataフォルダー用に2つの環境変数があります。

$env:APPDATA - is the environment variable for the 'roaming' appdata folder  
$env:LOCALAPPDATA - is the 'local' appdata folder

使用する環境変数は、削除するフォルダーの場所によって異なります。ただし、削除するフォルダの場所がわからない場合は、両方の場所を検索できます。

これを実現するために、両方の環境変数を$ appdatafoldersという変数に保存します…

$appdatafolders = $env:APPDATA, $env:LOCALAPPDATA

次に、ForEachループを使用して両方の場所を確認します。これがこの仕事をするコードです…

ForEach ($appdata in $appdatafolders) Get-ChildItem $appdata -Recurse -Filter 'testfolder' 
PowerShellがフォルダーを削除しないように、WhatIfパラメーターを含めました。代わりに、PowerShellは、WhatIfパラメーターが含まれていない場合に実行するアクションを表示します。

これは、PowerShellでのコマンドの結果です。スクリーンショットの右側の画像は、私のAppDataフォルダー内のフォルダーです。

PowerShellを使用してAppdataからフォルダーを削除する方法

PowerShellを使用して隠しフォルダーを削除する方法

Get-ChildItemコマンドには、Hiddenというパラメーターがあります。指定したフォルダー内の非表示フォルダーを一覧表示する場合は、Hiddenパラメーターを含めます。

以下のスクリーンショットでは、3つのフォルダーがあります(非表示または非表示)。

PowerShellを使用して非表示のフォルダーを削除する方法を示すために、Textfiles3を非表示にします。これで、フォルダが非表示になります。

PowerShellを使用して隠しフォルダーを削除する方法

隠しフォルダを一覧表示するには、以下のコマンドを実行します…

Get-ChildItem F:ITGFiles -Hidden

予想どおり、このコマンドは隠しフォルダーのみを一覧表示します。

PowerShellを使用して隠しフォルダーを削除するには、最後のコマンドをRemove-Itemコマンドにパイプします。

Get-ChildItem F:ITGFiles -Hidden | Remove-Item -Recurse -Force

フォルダーが削除されたことを確認するために、ファイルエクスプローラーで[非表示アイテムの表示]属性を有効にしました。

PowerShellを使用して隠しフォルダーを削除する方法

PowerShellを使用してファイルを削除するが、フォルダー構造は維持する方法

サブフォルダーを含むフォルダー内のすべてのファイルを削除したいが、フォルダー構造は保持したい場合があります。

これを実現するには、Get-ChildItemコマンドを実行し、Fileパラメーターを指定する必要があります。 Fileパラメーターを使用すると、Get-ChildItemは指定されたフォルダー内のファイルのみを一覧表示します。

これがどのように機能するかを示すために、以下のスクリーンショットに示すフォルダー構造を作成しました。

PowerShellを使用してファイルを削除するが、フォルダー構造は維持する方法

スクリーンショットに示されているように、folder1にはfolder2とfolder3の2つのサブフォルダーがあります。さらに、folder2とfolder3にはいくつかのファイルがあります。

Get-ChildItemを使用して、パスF: ITGFiles folder1内のファイルのみを表示するには、次のコマンドを実行します。

Get-ChildItem -Path F:ITGFilesfolder1 -File -Recurse

このコマンドは、F: ITGFiles folder1 folder2とディレクトリ:F: ITGFiles folder1 folder3の2つのパスにあるファイルのみを表示します。

最後に、ファイルを削除してフォルダ構造を維持するには、最後のコマンドをRemove-Item…にパイプします。

Get-ChildItem -Path F:ITGFilesfolder1 -File -Recurse | Remove-Item -Recurse -Force

このコマンドはすべてのファイルを削除しますが、フォルダー構造はそのまま残します。

PowerShellを使用してレジストリキーフォルダーを削除する方法

レジストリキーフォルダを一覧表示および削除するコマンドは、通常のフォルダを削除するために使用されるコマンドと同じです。

このガイドを最初から読んでいる場合は、これまでに2つのコマンドを使用してきました。

androidは分割画面を無効にします

Get-ChildItem :指定されたパスのアイテムを一覧表示するために使用されます
削除-アイテム :Get-ChildItemによってリストされたファイル/フォルダーを削除するために使用されます

ただし、唯一の違いは、レジストリキーフォルダにアクセスする方法です。

Get-ChildItemコマンドとRemove-Itemコマンドで使用するレジストリキーをフォーマットする方法は複数あります。ただし、この例では、以下の方法を使用します。

'registry::HKEY_CURRENT_USERControl PanelDesktop'

この例では、レジストリキーフォルダHKEY_CURRENT_USER Control Panel Desktopにアクセスします。上記のコマンド形式でわかるように、これを行うために、レジストリという単語を追加し、その後に2つのコロン::を追加しました。

PowerShellがWindowsレジストリでどのように機能するかについて詳しくは、ガイドをお読みください– PowerShellを使用してレジストリ値を読み取る方法 。

例を次のステップに移動して、上記のレジストリキーフォルダー内のアイテムを一覧表示するには、次のコマンドを実行します。

Get-ChildItem 'registry::HKEY_CURRENT_USERControl PanelDesktop'

このコマンドは、指定されたレジストリキーフォルダ内のすべてのサブキーフォルダを表示します。

指定したフォルダを削除したい場合は、まずGet-ChildItemを実行します。次に、出力をSelect-Objectにパイプします

Get-ChildItem -Path 'registry::HKEY_CURRENT_USERControl PanelDesktop' | Select-Object name

上記のコマンドは、元のレジストリキーフォルダ内のすべてのサブキーへのフルパスを表示します。

PowerShellを使用してレジストリキーフォルダーを削除する方法

次に、サブキーを削除するために、最後のコマンドをRemove-Itemにパイプします。ただし、特定のサブキーフォルダーを削除するには、最初に最後のコマンドをWhere-Objectにパイプ処理し、削除するサブキーの名前でフィルター処理します。

Get-ChildItem -Path 'registry::HKEY_CURRENT_USERControl PanelDesktop' | Select-Object name | Where-Object {$_.Name -like '  colors  '}

最後のコマンドは、指定されたレジストリサブキーフォルダパスのみを返すようになりました。

最後に、PowerShellでこのフォルダーサブキーを削除するには、最後のコマンドをRemove-Itemにパイプします。その前に、レジストリキーを変更し、それをGet-Itemにパイプする必要があります。

簡単にするために、最後のコマンドを変数に保存します

$RefSubkey = (Get-ChildItem -Path 'registry::HKEY_CURRENT_USERControl PanelDesktop' | Select-Object name | Where-Object {$_.Name -like '  colors  '}).Name

次に、Get-Itemコマンド用にフォーマットします

$RegKeyFormatted = 'registry::$RefSubkey'

最後に、フォーマットされたキーパスをGet-Item…にパイプします。

$RegKeyFormatted | Get-Item

これで、最後のコマンドをRemove-Itemにパイプすることで値を削除できます(このキーを削除したくないので、whatifパラメーターを含めました)

$RegKeyFormatted | Get-Item | Remove-Item -Force -Recurse -whatif

そしてここに結果があります…

PowerShellを使用してレジストリキーフォルダーを削除する方法

PowerShellを使用してフォルダ名を削除する方法

このガイドの他の例では、PowerShellを使用してLikeフィルターを使用してフォルダー名を削除する方法を示しました。また、前の例ですでに示したように、このフィルターはGet-ChildItemコマンドまたはWhere-Objectコマンドで適用できます。

たとえば、パスF: ITGFilesにあるfileのような名前のすべてのファイルとフォルダーを削除するには、次のコマンドを使用できます。

Get-ChildItem F:ITGFiles -Filter '  file  ' -Recurse
フィルタを機能させるには、ワイルドカードを使用する必要がある場合があります。この例では、アスタリスクのワイルドカードを使用しています。

Get-ChildItemをWhere-Objectにパイプすることで、同じ結果を得ることができます。次に、Where-Objectでフィルタリングを実行します。

Get-ChildItem F:ITGFiles -Recurse | Where-Object {$_.Name -like '  file  '}

このコマンドは、最後のコマンドと同じ結果を返します。

PowerShellを使用してフォルダ名を削除する方法

このガイドの他の例と同様に、フォルダーを削除するには、2つのコマンドのいずれかの出力をRemove-Itemにパイプします。

PowerShellを使用して、指定したサイズよりも大きいフォルダーを削除する方法

PowerShellで指定されたサイズより大きいフォルダーを削除する場合は、最初に指定されたパスのフォルダーサイズを計算する必要があります。

ただし、指定したフォルダーパス内のサブフォルダーへのフルパスをリストする必要があります。フォルダパス内のすべてのサブフォルダへのフルパスを一覧表示するには、次のようなコマンドを実行します。

$subfolderpaths = (Get-ChildItem F:ITGFiles -Depth 0 | Where-Object {$_.PSIsContainer -eq $TRUE}).FullName

このコマンドは、フォルダーパスF: ITGFiles内のすべてのサブフォルダーへのフルパスを一覧表示します。

を使用して 深さ 代わりに0の値を持つパラメータ 再帰 第1レベルのサブフォルダーのみが返されるようにします。 PowerShellを使用してネットワーク共有フォルダーを削除する方法

サブフォルダーへのフルパスができたので、この情報を使用して各サブフォルダーのサイズを計算します。ただし、サブフォルダーへのフルパス(後で削除する必要があります)とサイズを取得するには、カスタムスクリプトを作成する必要があります。

完全なスクリプトは次のとおりです。

$subfolderpaths = (Get-ChildItem F:ITGFiles -Depth 0 | where-Object {$_.PSIsContainer -eq $TRUE}).FullName #Using Depth 0, instead of Recurse ensures that only the first level folders are returned ForEach ($folderpath in $subfolderpaths) { $FolderPath = $folderpath $FolderSize = [math]::round((Get-ChildItem $folderpath -Recurse | Measure-Object -Property Length -Sum).Sum /1MB, 1) $report = '' | Select-Object -Property FolderPath, 'FolderSize (MB)' $report.FolderPath = $FolderPath $report.'FolderSize (MB)' = $FolderSize If ($report.'FolderSize (MB)' -ge 10) { $report } } 

そして、これがPowerShellISEのコマンドの結果です。

スクリーンショットからわかるように、スクリプトはサイズ(10 MB)の基準を満たすファイルを1つだけ返します。

明らかに、タスクを完了するための最後のビットが1つあります。それは、ファイルを削除することです。サイズ要件を満たすファイルを削除するために、このスクリプトに示すようにIFステートメントを変更しました…

If ($report.'FolderSize (MB)' -ge 10) { Remove-Item $report.FolderPath -Force -Recurse }

したがって、これが指定された値より大きいフォルダーを削除する最後のスクリプトです

$subfolderpaths = (Get-ChildItem F:ITGFiles -Depth 0 | where-Object {$_.PSIsContainer -eq $TRUE}).FullName #Using Depth 0, instead of Recurse ensures that only the first level folders are returned ForEach ($folderpath in $subfolderpaths) { $FolderPath = $folderpath $FolderSize = [math]::round((Get-ChildItem $folderpath -Recurse | Measure-Object -Property Length -Sum).Sum /1MB, 1) $report = '' | Select-Object -Property FolderPath, 'FolderSize (MB)' $report.FolderPath = $FolderPath $report.'FolderSize (MB)' = $FolderSize If ($report.'FolderSize (MB)' -ge 10) { Remove-Item $report.FolderPath -Force -Recurse } } 
スクリプトを使用するには、Get-ChildItemのパスF: ITGFiles – 1行目を変更します。また、削除するフォルダーのサイズを10(MB)から必要なサイズに変更します。

PowerShellを使用してネットワーク共有フォルダーを削除する方法

PowerShellを使用してネットワークフォルダーを削除するプロセスは、ローカルフォルダーを削除するプロセスと同じです。唯一の違いは、ネットワークフォルダの指定方法です。

ネットワークフォルダを指定する方法に加えて、適切な権限も必要です。具体的には、共有の変更権限が必要です。

さらに、NTFSセキュリティの変更権限も必要です。

これらのアクセス許可の要件が満たされると、Get-ChildItemコマンドを使用してネットワークフォルダーにアクセスできます。次に、フォルダーを削除するには、Get-ChildItemの出力をRemove-Itemにパイプします。

PowerShellを使用してネットワークフォルダーを削除する方法を示すために、TestShareという共有フォルダーを使用します。フォルダは私のにあります Windows 11 ITGWIN11BETAと呼ばれるPCをテストします。

共有ネットワークフォルダのコンテンツを一覧表示するには、次のようにGet-ChildItemコマンドを使用します…

Get-ChildItem ITGWIN11BETATestShare -Recurse

ローカルフォルダーと同様に、このコマンドは共有ネットワークフォルダー内のすべてのフォルダーとサブフォルダーを一覧表示します。

PowerShellを使用してフォルダまたはファイルを削除する方法

この時点から、最後のコマンドを直接Remove-Itemにパイプできます。または、Remove-Itemにパイプする前に、フィルターを適用します。

たとえば、特定のフォルダを削除する場合は、 フィルター Get-ChildItemのパラメーター。または、Get-ChildItemをWhere-Objectにパイプして、 フィルター Where-Objectのパラメータ。

最後に、ネットワーク共有フォルダー内のアイテムを削除するには、結果をRemove-Itemにパイプします。

PowerShellを使用してフォルダまたはファイルを削除する方法

特定の名前で始まるフォルダまたはファイルを削除する場合は、 フィルター ファイルを一覧表示するGet-ChildItemコマンドレットのパラメーター。次に、結果をRemove-Itemにパイプします。

または、 消去() Get-ChildItemのメソッド。

この例を説明するために、以下のスクリーンショットでfで始まるすべてのファイルとフォルダーを削除します。

前述したように、最初のステップは、フィルターパラメーターを指定してGet-ChildItemコマンドレットを使用することです。サンプルコマンドは次のとおりです。

Get-ChildItem F:ITGFilesTextfiles -Filter *f*
もう1つのオプションは、Get-ChildItemをWhere-Objectにパイプし、Where-Objectでフィルタリングを実行することです。

このコマンドは、fで始まるすべてのファイルを一覧表示します。以下のスクリーンショットを参照してください。

PowerShellを使用して1つまたは複数のファイルを削除し、ログファイルにレポートを書き込む方法

fで始まるすべてのフォルダーとファイルを削除する最後のステップは、

Get-ChildItem F:ITGFilesTextfiles -Filter *f* | Remove-Item -Recurse -Force

PowerShellを使用してSoftwareDistributionフォルダーを削除する方法

ご存知かもしれませんが、Windowsはダウンロードした更新プログラムをSoftwareDistributionフォルダーに保存します。理想的には、このフォルダを削除する必要はありません。

ただし、Windows Updateデータベースが破損している場合、それを修正する1つの方法は、 SoftwareDistribution フォルダ。ただし、その前に、まずWindowsUpdateを停止する必要があります。

Windows Updateサービスを停止するには、管理者としてPowerShellを実行します。次に、以下のコマンドを実行します。

Get-Service -Name wuauserv | Stop-Service
Windows Updateサービスを停止しないと、削除することはできません。 SoftwareDistribution フォルダ

次に、PowerShellを使用してSoftwareDistributionフォルダーを削除するには、次のコマンドを実行します。

$SoftwareDistribution = $env:SystemDrive + 'WindowsSoftwareDistribution'  
Get-ChildItem $SoftwareDistribution -Recurse -force | Remove-Item -Recurse -Force
$Windowsfolder = $env:SystemDrive + 'Windows'
Get-ChildItem $Windowsfolder -filter SoftwareDistribution | Remove-Item -Recurse -Force

最後に、SoftwareDistributionフォルダーを再作成するには、WindowsUpdateサービスを再起動します

Get-Service -Name wuauserv | Start-Service

PowerShellを使用してZIP後にファイルまたはフォルダーを削除する方法

ファイルまたはフォルダを圧縮するには、次の例に示すように、Compress-Archiveコマンドを使用します。

Compress-Archive -LiteralPath F:ITGFilesTextfiles2 -DestinationPath F:ITGFilesTextfiles2 -CompressionLevel Fastest
LiteralPathを、zipするファイルまたはフォルダーのソースパスに変更します。また、DestinationPathをzipファイルを保存するパスに変更します。

ファイルを圧縮したら、以下のコマンドを使用してファイルを削除します…

Remove-Item F:ITGFilesTextfiles2 -Recurse -Force

PowerShellを使用して1つまたは複数のファイルを削除し、ログファイルにレポートを書き込む方法

PowerShellを使用してファイルまたはフォルダーを削除してから、アクションをログファイルに報告する場合は、最初にログファイル名を定義する必要があります。

この例では、2つのログファイルが必要です。1つは成功をログに記録し、もう1つはエラーをログに記録します。

私は通常、日付に基づいてログファイルを作成するのが好きです。この例では、最初に日付スタンプを作成し、それを変数に保存します。

$CurrentDate = Get-Date -Format 'dddd-dd-MM-yyyy-HH-mm'

次に、日付スタンプに基づいて2つのログファイルを作成します…

$SuccessLog = 'SuccessLog-' + $CurrentDate + '.log'  
$ErrorLog = 'ErrorLog-' + $CurrentDate + '.log'

欠けている部分が1つあります。それは、ログファイルを保存するためのディレクトリパスです。このビットを追加するために、パスを変数に保存します…

$Path = 'F:logfiles'

次に、上記のログファイルへのパスを追加します…

$SuccessLog = $Path + 'SuccessLog-' + $CurrentDate + '.log'  
$ErrorLog = $Path + 'ErrorLog-' + $CurrentDate + '.log'

最後の2つのコマンドは、2つのログファイルを作成します。詳細については、以下のスクリーンショットを参照してください…

ログファイルを作成したので、指定したパスのファイルとフォルダーを削除するPowerShellスクリプトを作成します。次に、ログファイルにレポートを書き込みます。

この例では、 Windows Tempフォルダー内のファイルを削除します。最初のステップは、このフォルダへのパスを変数に保存することです…

$WindowsTemp = $env:SystemDrive + 'WindowsTemp'

次に、Get-ChildItemを使用してフォルダーのコンテンツを一覧表示し、出力をRemove-Itemにパイプします。

ただし、エラーをキャプチャできるようにするには、コマンド全体をTry、Catchで囲む必要があります。

これが完全なスクリプトです…

$error.Clear() #clears all existing errors Try { $CurrentDate = Get-Date -Format 'dddd-dd-MM-yyyy-HH-mm' $LogPath = 'F:logfiles' $SuccessLog = $LogPath + 'SuccessLog-' + $CurrentDate + '.log' $ErrorLogFile = $LogPath + 'ErrorLog-' + $CurrentDate + '.log' $Path = 'E:
eports' $items = Get-ChildItem $Path -Recurse -Force -ErrorAction SilentlyContinue ForEach ($item in $items) { Remove-Item $item.FullName -Force -Recurse -ErrorAction SilentlyContinue If (Test-Path $item.FullName -ErrorAction Continue ) #$errormessage = $item.FullName + $error.Exception #$error.Exception.Message Else Out-File $SuccessLog -Append Add-Content -Value '$item successfully deleted' -Path $SuccessLog } } Catch { }
スクリプトを使用するには、スクリプトをPowerShellISEにコピーします。次に、$ Path変数を削除するフォルダーのパスに変更します。また、$ LogPathをログファイルを保存するフォルダーパスに変更します。

これで、PowerShellを使用してファイルやフォルダーを削除するための包括的なガイドです。ガイドがお役に立てば幸いです。

役に立ったと思ったら、親切に投票してください はい この投稿は役に立ちましたか?下。または、このページの最後にあるLEAVE AREPLYフォームと詳細なフィードバックを共有することもできます。

最後に、例を含むその他のPowerShellガイドについては、WindowsPowerShellのハウツーページにアクセスしてください。また、無料のPowerShellトレーニングガイドが役立つ場合があります。