Я пытаюсь создать сценарий, что при получении определенный файл он разархивировал его, просматривает разархивированный файл и удаляет все содержание за исключением двух или трех определенных папок с их содержанием. Затем переzip это. Я в точке, где архивирование, разархивация и удаление работ, но когда удаление выполняется, оно просматривает все, не только верхний слой папок. Какие-либо предложения? Вот мой сценарий до сих пор:
$filesToZip="c:\temp\powertest\*"
$zipfilename = "c:\temp\ziptest.zip"
$originalzipfile = "c:\temp\powertest.zip"
$extractionlocation = "c:\temp\"
function Expand-ZIPFile($file, $destination)
{
$shell = new-object -com shell.application
$zip = $shell.NameSpace($file)
foreach($item in $zip.items())
{
$shell.Namespace($destination).copyhere($item)
}
}
Expand-ZIPFile –File $originalzipfile –Destination $extractionlocation
# replace "New folder" and "New Text Document.txt" with folders and documents you dont want deleted specifiying the file extensions seperated by commas
Remove-Item -recurse $filesToZip -exclude 'New folder' , 'New Text Document.txt'
$value = $null
if(-not (test-path($zipfilename)))
{
set-content $zipfilename $value
#("PK" + [char]5 + [char]6 + ("$([char]0)" * 18))
(dir $zipfilename).IsReadOnly = $false
}
$shellApplication = new-object -com shell.application
$zipPackage = $shellApplication.NameSpace($zipfilename)
$files = dir $filesToZip
foreach($file in $files)
{
$zipPackage.CopyHere($file.FullName)
Start-sleep -milliseconds 500
}
remove-item -recurse "C:\temp\powertest\"
Если вы хотите удалить элементы только из верхней папки, вам следует удалить параметр -recurse
из команды Remove-Item
.
Кроме того, часто вы можете использовать переключатели -include или -exclude с командами, которые могут помочь вам сказать просто получить эти файлы или получить все, но только эти конкретные файлы.