programing

모든 파일 및 폴더 삭제, 하위 폴더 제외

iphone6s 2023. 7. 31. 21:12
반응형

모든 파일 및 폴더 삭제, 하위 폴더 제외

일부 파일 및 폴더 목록을 제외한 모든 파일 및 폴더를 삭제해야 하는 폴더가 있습니다.

이미 파일 목록을 제외할 수 있지만 폴더와 폴더 내용을 제외할 방법이 없습니다.

다음은 폴더 구조입니다.

|-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

파일을 보관하고 싶습니다.txt와 보관할 폴더 및 내용.

이것이 제가 지금 가지고 있는 것입니다.

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

이렇게 해도 일부 파일은 삭제되지 않습니다.txt. 보관할 폴더와 폴더의 내용을 삭제 목록에서 제외하는 방법이 있습니까?

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

Remove-Item에서 -recurse 스위치가 제대로 작동하지 않습니다(폴더의 모든 하위 항목이 삭제되기 전에 폴더 삭제를 시도합니다).전체 이름을 길이별로 내림차순으로 정렬하면 폴더의 하위 항목이 모두 삭제되기 전에 삭제됩니다.

PowerShell 3.0 이하에서는 다음과 같은 작업을 간단히 수행할 수 있습니다.

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

제가 놓치고 있는 매개변수가 없는 한, 이것은 속임수를 쓰는 것 같습니다.

편집: 아래 설명을 참조하십시오. PS3 이후 Remove-Item의 동작이 변경되었습니다. 이 솔루션은 더 이상 적용할 수 없는 것 같습니다.

보관할 항목을 제외한 모든 항목을 선택하고 삭제 명령으로 연결합니다.

해당 폴더가 있다고 가정합니다.

C:.
├───delme1
│   │   delme.txt
│   │
│   └───delmetoo
├───delme2
├───keepme1
│       keepmetoo.txt
│
└───keepme2

keepme1 및 keepme2 폴더를 제외한 모든 항목을 삭제합니다.

Get-ChildItem -Exclude keepme1,keepme2 | Remove-Item -Recurse -Force

다른 해결책들은 괜찮지만, 저는 이것을 이해하고 기억하기 쉽다는 것을 알았습니다.

아래를 사용하여 -Recurse를 첫 번째 줄에서 제거하면 모든 파일 및 하위 폴더가 제외 폴더 목록 아래에 남습니다.

   Get-ChildItem -Path "PATH_GOES_HERE" -Exclude "Folder1", "Folder2", "READ ME.txt" | foreach ($_) {
       "CLEANING :" + $_.fullname
       Remove-Item $_.fullname -Force -Recurse
       "CLEANED... :" + $_.fullname
   }

네, 저는 이것이 오래된 실이라는 것을 압니다.파워셸 5에서 작동하기 위해 위의 답변을 얻을 수 없었습니다. 그래서 제가 알아낸 것은 다음과 같습니다.

Get-ChildItem -Path $dir -Exclude 'name_to_ignore' |
ForEach-Object {Remove-Item $_ -Recurse }

이렇게 하면 항목이 발견된 위치 대신 -항목을 제거할 수 있습니다.

MSDN에 따라 Remove-Item.-excludeparam 이 합니다. 대신 이 변형을 사용하십시오.

Get-ChildItem * -exclude folderToExclude | Remove-Item

우연히 이것을 발견했고 나에게 맞는 한 줄 명령어를 발견했습니다.그러면 해당 디렉토리의 모든 폴더와 파일이 삭제되고 "제외됨" 목록에는 모든 폴더와 파일이 유지됩니다.또한 일부 파일이 읽기 전용이거나 사용 중인 경우에도 오류가 반환되지 않도록 자동으로 설정됩니다.

@powershell Remove-item C:\Random\Directory\* -exclude "MySpecialFolder", "MySecondSpecialFolder" -force -erroraction 'silentlycontinue'

이것은 또한 누군가에게 도움이 될 것입니다...

PATH_GOES_HERE에 대해 비어 있거나 이전에 정의되지 않은 변수를 추가하면 사용자 디렉토리(스크립트가 관리자로 실행되는 경우 C:\windows\system32)에서 재귀적으로 삭제될 수 있습니다.저는 이것을 어렵게 알게 되었고 창문을 다시 설치해야 했습니다.

직접 해보세요! (아래는 파일 디렉토리만 테스트로 출력합니다.)txt)

Get-ChildItem -Path $dir2 -Recurse -Exclude "Folder1 ", FileName.txt | foreach ($_) {
$_.fullname >> C:\temp\test.txt
}

저는 이것을 사용했습니다, 그것은 저에게 완벽하게 맞습니다.

Get-ChildItem -Path 'C:\Temp\*' -Recurse | Where-Object {($_.FullName -notlike "*windirstat*") -and ($_.FullName -notlike "C:\Temp\GetFolderSizePortable*")} | Remove-Item -Recurse

경로에 정규식 특수 문자가 포함된 경우 파이프를 허용하지 않는 -LiteralPath 옵션을 사용해야 합니다.이 경우 올바른 솔루션은 다음과 같습니다.

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

이것은 또한 누군가에게 도움이 될 것입니다...

Get-ChildItem -Path PATH_GOES_HERE -Recurse -Exclude "Folder1 ", "Folder2", FileName.txt | foreach ($_) {
    "CLEANING :" + $_.fullname
    Remove-Item $_.fullname -Force -Recurse
    "CLEANED... :" + $_.fullname
}

저는 이 아이디어에 대한 기여를 받고 싶습니다.

  • 모든 폴더 삭제 및 파일에 숨겨진 폴더 포함

$get-childitem -Path D:\path\folder\to\delete* -Force |select-object -Expand property Fullname |remove-item -recurse -Confirm:$false -Force

  • 모든 폴더 및 파일을 삭제하고 숨겨진 폴더를 포함하되 제외 폴더는 유지

$get-childitem -Path D:\path\folder\to\delete* -이름 제외 폴더 -Force | select-object -Expand property Fullname | remove-item -Force

$get-childitem -Path D:\path\folder\to\delete\ -이름 제외 폴더 -Force | select-object -Expand property Fullname | remove-item -Force

첫 번째 줄은 폴더로 유지, 두 번째 줄은 나머지 폴더 제거

git와 같은 svn 저장소를 보존하려는 경우 기본 폴더가 숨겨져 있으므로 다른 파일 및 폴더와 함께 삭제하지 않고 Powershell의 폴더에 CD를 넣고 다음을 수행하면 됩니다.

Get-ChildItem | Remove-Item -Recurse

숨겨진 폴더와 숨겨진 폴더의 내용은 기본적으로 보존됩니다.그것은 저에게 그 문제를 해결해 줍니다.

언급URL : https://stackoverflow.com/questions/14775672/delete-all-files-and-folders-but-exclude-a-subfolder

반응형