我想将一些文件解压缩到各自的文件夹中,并使用与zip文件相同的名称。我一直在做这样笨拙的事情,但由于这是PowerShell,通常有一种更聪明的方法来实现这些事情。
是否有一种或两种方法,我可以在一个文件夹中的每个zip文件上操作,并将其解压缩到与zip同名的子文件夹中(但没有扩展名)?
foreach ($i in $zipfiles) {
$src = $i.FullName
$name = $i.Name
$ext = $i.Extension
$name_noext = ($name -split $ext)[0]
$out = Split-Path $src
$dst = Join-Path $out $name_noext
$info += "`n`n$name`n==========`n"
if (!(Test-Path $dst)) {
New-Item -Type Directory $dst -EA Silent | Out-Null
Expand-Archive -LiteralPath $src -DestinationPath $dst -EA Silent | Out-Null
}
}
您可以使用更少的变量。当$zipfiles
集合包含FileInfo对象时,大多数变量可以通过使用对象已有的属性来替换。
另外,尽量避免使用+=
连接到一个变量,因为这既费时又耗内存。
在变量中捕获你在循环中输出的任何结果。
像这样:
# capture the stuff you want here as array
$info = foreach ($zip in $zipfiles) {
# output whatever you need to be collected in $info
$zip.Name
# construct the folderpath for the unzipped files
$dst = Join-Path -Path $zip.DirectoryName -ChildPath $zip.BaseName
if (!(Test-Path $dst -PathType Container)) {
$null = New-Item -ItemType Directory $dst -ErrorAction SilentlyContinue
$null = Expand-Archive -LiteralPath $zip.FullName -DestinationPath $dst -ErrorAction SilentlyContinue
}
}
# now you can create a multiline string from the $info array
$result = $info -join "`r`n==========`r`n"