58

ファイルとフォルダーの小さなリストを除いて、すべてのファイルとフォルダーを削除する必要があるフォルダーがあります。

ファイルのリストを除外することはできますが、フォルダーとその内容を除外する方法がわかりません。

フォルダ構造は次のとおりです。

|-C:\temp
 \-C:\temp\somefile.txt
 \-C:\temp\someotherfile.txt
| |-C:\temp\foldertodelete
   \-C:\temp\foldertodelete\file1.txt
| |-C:\temp\foldertokeep
|  \-C:\temp\foldertokeep\file2.txt

somefile.txt とフォルダー foldertokeep とそのコンテンツを保持したい。

これは私が今持っているものです:

Get-ChildItem -Path  'C:\temp' -Recurse -exclude somefile.txt | Remove-Item -force -recurse

これは実際には somefile.txt を削除しません。フォルダー foldertokeep とそのコンテンツを削除リストから除外する方法はありますか?

4

12 に答える 12

63
Get-ChildItem -Path  'C:\temp' -Recurse -exclude somefile.txt |
Select -ExpandProperty FullName |
Where {$_ -notlike 'C:\temp\foldertokeep*'} |
sort length -Descending |
Remove-Item -force 

-recurseスイッチは、Remove-Itemでは正しく機能しません(フォルダー内のすべての子アイテムが削除される前に、フォルダーを削除しようとします)。フルネームを長さの降順で並べ替えると、フォルダー内のすべての子アイテムが削除される前にフォルダーが削除されないことが保証されます。

于 2013-02-08T15:36:51.647 に答える
31

PowerShell 3.0以下では、次のことを簡単に試すことができます。

Remove-Item -recurse c:\temp\* -exclude somefile.txt,foldertokeep

不足しているパラメーターがない限り、これでうまくいくようです...

編集: 以下のコメントを参照してください。Remove-Item の動作は PS3 以降に変更されました。この解決策は適用されないようです。

于 2013-02-12T00:37:34.283 に答える
8

以下を使用して、最初の行から -Recurse を削除しただけで、すべてのファイルとサブフォルダーが除外フォルダーリストの下に残ります。

   Get-ChildItem -Path "PATH_GOES_HERE" -Exclude "Folder1", "Folder2", "READ ME.txt" | foreach ($_) {
       "CLEANING :" + $_.fullname
       Remove-Item $_.fullname -Force -Recurse
       "CLEANED... :" + $_.fullname
   }
于 2015-07-01T07:02:26.443 に答える
5

MSDN によると、 paramRemove-Itemには既知の問題があります。-exclude代わりにこのバリアントを使用してください。

Get-ChildItem * -exclude folderToExclude | Remove-Item
于 2017-06-01T20:16:03.317 に答える
4

これも誰かを助けるでしょう...

空であるか事前に定義されていない PATH_GOES_HERE の変数を追加すると、ユーザー ディレクトリ (またはスクリプトが管理者として実行されている場合は C:\windows\system32) で再帰的な削除が発生する可能性があります。これは難しい方法であることがわかり、Windows を再インストールする必要がありました。

自分で試してみてください!(以下は、ファイル ディレクトリのみを test.txt に出力します)

Get-ChildItem -Path $dir2 -Recurse -Exclude "Folder1 ", FileName.txt | foreach ($_) {
$_.fullname >> C:\temp\test.txt
}
于 2015-08-14T02:22:19.353 に答える