하위 폴더로 가득 찬 특정 폴더에서 폴더 및 하위 폴더를 삭제하는 스크립트

하위 폴더로 가득 찬 특정 폴더에서 폴더 및 하위 폴더를 삭제하는 스크립트

사용자 간 임시 전송에 사용하는 사용자 폴더로 가득 찬 폴더(사용자)가 있습니다. 사용자 폴더를 제거하거나 권한을 변경하지 않고 사용자 폴더의 내용을 비우는 스크립트를 예약할 수 있기를 원합니다.

배치 파일을 통해 이를 수행할 수 있는 방법이 있습니까? 나는 원래 다음과 같은 것을 사용할 수 있다고 생각했습니다.

del /F \사용자**.*

그러나 그것은 효과가 없었습니다.

도와주세요!

그리고 감사합니다!!

답변1

당신은 Server 2012를 사용하고 있습니다. 배치를 사용할 이유가 거의 없습니다.

여기에 몇 가지 Powershell이 ​​있습니다.

Foreach($_ In Get-ChildItem C:\Users -Recurse) 
{ 
    If(!$_.PSIsContainer) { Remove-Item $_.Fullname } 
}

이렇게 하면 C:\Users 디렉터리 트리 안팎의 모든 파일이 삭제되지만 모든 디렉터리는 그대로 유지됩니다.

편집하다:

이건 어때:

Foreach($_ In Get-ChildItem C:\Users)
{
    If($_.PSIsContainer)
    {
        Get-ChildItem $_.FullName -Recurse | Remove-Item
    }   
}

이제 우리가 하는 일은 C:\Users 아래의 "첫 번째 수준" 디렉터리 목록을 가져온 다음 해당 폴더 각각의 내용을 재귀적으로 지우는 것입니다. 따라서 결국 남게 될 유일한 것은 C입니다. :\Users 및 그 아래 하위 디렉터리의 첫 번째 수준입니다.

편집하다:이것을 더 잘 이해하고 싶지만 Powershell이 ​​처음이라고 말씀하셨기 때문에 위 스크립트에 대해 좀 더 자세히 설명하겠습니다.

Get-ChildItem C:\Users기본적으로 DOS와 동일 C:\> dir C:\Users하지만 Powershell은 모든 것을 다음 형식으로 처리하고 반환합니다.사물, 단순한 콘솔 출력이 아닙니다. 그래서 첫 번째 줄을 읽으면서

Foreach($_ In Get-ChildItem C:\Users)

이는 C:\Users에 존재하는 각 "개체"에 대해 루프를 진행한다는 의미입니다. 우리는 이후~ 아니다여기에서 매개변수를 사용하면 -RecursePowershell은 C:\Users의 첫 번째 수준 디렉터리 목록만 반환하고 하위 디렉터리를 탐색하지 않습니다.

If($_.PSIsContainer)"이 현재 개체의 "PSIsContainer" 속성이 True로 설정된 경우(이것이 디렉터리인 경우"라고 말하는 멋진 방법인 경우)를 의미하는 If 문입니다. 그런 다음 이 if 루프로 이동합니다.

따라서 아래의 모든 하위 디렉터리에 대해 C:\UsersIf 루프를 입력합니다. 따라서 C:\Users그 아래에 C:\Users\joe, C:\Users\kate및 3개의 하위 디렉터리가 있다고 가정해 보겠습니다 C:\Users\bill. 해당 하위 디렉터리에는 그 아래에 원하는 수의 파일과 하위 디렉터리가 있을 수 있습니다.

따라서 If 루프를 3번 입력하므로 매번 다음과 같이 표시됩니다.

Get-ChildItem <C:\Users\joe> -Recurse | Remove-Item

Get-ChildItem <C:\Users\kate> -Recurse | Remove-Item

Get-ChildItem <C:\Users\bill> -Recurse | Remove-Item

이 줄이 수행하는 작업은 해당 하위 디렉터리의 내용을 가져오는 것이며, 스위치는 , 및 -Recurse의 모든 하위 디렉터리를 드릴다운하도록 지정됩니다 .joekatebill

그런 다음 해당 하위 개체를 모두 가져와서파이프에 대한 멋진 별칭으로 Remove-Item생각할 수 있습니다 . 모든 것을 삭제합니다.Remove-Itemdel

말이 되나요?

관련 정보