Você está no Servidor 2012 ... você tem cerca de 0 motivo para usar o lote.
Aqui, tem um pouco do Powershell:
Foreach($_ In Get-ChildItem C:\Users -Recurse)
{
If(!$_.PSIsContainer) { Remove-Item $_.Fullname }
}
Isso excluirá todos os arquivos na e sob a árvore de diretórios C: \ Users, mas deixará todos os diretórios intactos.
Editar:
Que tal isso:
Foreach($_ In Get-ChildItem C:\Users)
{
If($_.PSIsContainer)
{
Get-ChildItem $_.FullName -Recurse | Remove-Item
}
}
Agora, o que estamos fazendo é obter uma lista de diretórios de "primeiro nível" em C: \ Usuários e, em seguida, recursivamente limpar o conteúdo de cada uma dessas pastas, então, no final, as únicas coisas que serão left são C: \ Users e o primeiro nível de subdiretórios abaixo dele.
Editar: Desde que você mencionou que gostaria de entender isso melhor, mas é novo no Powershell, explicarei o script acima com um pouco mais de detalhes.
Get-ChildItem C:\Users
é basicamente igual a C:\> dir C:\Users
no DOS, mas o Powershell negocia e retorna tudo na forma de objetos , não apenas na saída simples do console. Então, pela primeira linha de leitura
Foreach($_ In Get-ChildItem C:\Users)
Isso significa que vamos passar por um loop para cada "objeto" existente em C: \ Users. Como não estamos usando o parâmetro -Recurse
aqui, o Powershell só retornará a lista de diretórios de primeiro nível de C: \ Users e não irá procurar nos subdiretórios.
If($_.PSIsContainer)
é uma instrução If que significa "se a propriedade" PSIsContainer "do objeto atual estiver configurada como True, que é apenas uma maneira sofisticada de dizer" se este for um diretório ", então vá para este loop if. / p>
Assim, para cada subdiretório em C:\Users
, entraremos no loop If. Então, digamos que C:\Users
tenha três subdiretórios: C:\Users\joe
, C:\Users\kate
e C:\Users\bill
. Esses subdiretórios podem ter qualquer número de arquivos e subdiretórios sob eles.
Então vamos entrar no loop If 3 vezes, então cada vez será algo como isto:
Get-ChildItem <C:\Users\joe> -Recurse | Remove-Item
Get-ChildItem <C:\Users\kate> -Recurse | Remove-Item
Get-ChildItem <C:\Users\bill> -Recurse | Remove-Item
O que essa linha faz é obter o conteúdo desse subdiretório, e a opção -Recurse
é especificada para que seja detalhada em todos os subdiretórios de joe
, kate
e bill
.
Em seguida, são necessários todos esses objetos-filhos e pipes para Remove-Item
, e você pode pensar em Remove-Item
como um apelido sofisticado para del
. Exclui todas as coisas.
Faz sentido?