사용자 간 임시 전송에 사용하는 사용자 폴더로 가득 찬 폴더(사용자)가 있습니다. 사용자 폴더를 제거하거나 권한을 변경하지 않고 사용자 폴더의 내용을 비우는 스크립트를 예약할 수 있기를 원합니다.
배치 파일을 통해 이를 수행할 수 있는 방법이 있습니까? 나는 원래 다음과 같은 것을 사용할 수 있다고 생각했습니다.
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에 존재하는 각 "개체"에 대해 루프를 진행한다는 의미입니다. 우리는 이후~ 아니다여기에서 매개변수를 사용하면 -Recurse
Powershell은 C:\Users의 첫 번째 수준 디렉터리 목록만 반환하고 하위 디렉터리를 탐색하지 않습니다.
If($_.PSIsContainer)
"이 현재 개체의 "PSIsContainer" 속성이 True로 설정된 경우(이것이 디렉터리인 경우"라고 말하는 멋진 방법인 경우)를 의미하는 If 문입니다. 그런 다음 이 if 루프로 이동합니다.
따라서 아래의 모든 하위 디렉터리에 대해 C:\Users
If 루프를 입력합니다. 따라서 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
의 모든 하위 디렉터리를 드릴다운하도록 지정됩니다 .joe
kate
bill
그런 다음 해당 하위 개체를 모두 가져와서파이프에 대한 멋진 별칭으로 Remove-Item
생각할 수 있습니다 . 모든 것을 삭제합니다.Remove-Item
del
말이 되나요?