Очистка папок с помощью PowerShell
Я хочу очистить некоторые каталоги после выполнения script, удалив определенные папки и файлы из текущего каталога, если они существуют. Первоначально я структурировал script следующим образом:
if (Test-Path Folder1) {
Remove-Item -r Folder1
}
if (Test-Path Folder2) {
Remove-Item -r Folder2
}
if (Test-Path File1) {
Remove-Item File1
}
Теперь, когда у меня есть довольно много элементов, перечисленных в этом разделе, я хотел бы очистить код. Как я могу это сделать?
Боковое примечание: элементы очищаются до запуска script, так как они оставлены после предыдущего прогона в случае, если мне нужно их изучить.
Ответы
Ответ 1
# if you want to avoid errors on missed paths
# (because even ignored errors are added to $Error)
# (or you want to -ErrorAction Stop if an item is not removed)
@(
'Directory1'
'Directory2'
'File1'
) |
Where-Object { Test-Path $_ } |
ForEach-Object { Remove-Item $_ -Recurse -Force -ErrorAction Stop }
Ответ 2
Folder1, Folder2, File1, Folder3 |
?{ test-path $_ } |
%{
if ($_.PSIsContainer) {
rm -rec $_ # For directories, do the delete recursively
} else {
rm $_ # for files, just delete the item
}
}
Или вы можете сделать два отдельных блока для каждого типа.
Folder1, Folder2, File1, Folder3 |
?{ test-path $_ } |
?{ $_.PSIsContainer } |
rm -rec
Folder1, Folder2, File1, Folder3 |
?{ test-path $_ } |
?{ -not ($_.PSIsContainer) } |
rm
Ответ 3
Одна возможность
function ql {$args}
ql Folder1 Folder2 Folder3 File3 |
ForEach {
if(Test-Path $_) {
Remove-Item $_
}
}
Ответ 4
# if you do not mind to have a few ignored errors
Remove-Item -Recurse -Force -ErrorAction 0 @(
'Directory1'
'Directory2'
'File1'
)