我在网上找到了这个 powershell 脚本,我想从批处理文件运行它。有人能给我这个脚本的正确语法吗?如果可能的话,可以输入多个目录,脚本将压缩。
########################################################
# out-zip.ps1
#
# Usage:
# To zip up some files:
# ls c:\source\*.txt | out-zip c:\target\archive.zip $_
#
# To zip up a folder:
# gi c:\source | out-zip c:\target\archive.zip $_
########################################################
$path = $args[0]
$files = $input
if (-not $path.EndsWith('.zip')) {$path += '.zip'}
if (-not (test-path $path)) {
set-content $path ("PK" + [char]5 + [char]6 + ("$([char]0)" * 18))
}
$ZipFile = (new-object -com shell.application).NameSpace($path)
$files | foreach {$zipfile.CopyHere($_.fullname)}
所以我真正需要的是显示此内容的 cmd 文件(最好带有额外的文件夹)
gi c:\source | out-zip c:\target\archive.zip $_
谢谢,金!
答案1
我遇到了同样的问题,只创建了一个 1kb 的 zip 文件。我发现我必须在命令中包含 -noexit:powershell.exe -noexit -Command "gi c:\source | C:\users\Kim\Dpcuments\WindowsPowerShell\out-zip.ps1 c:\target\archive.zip"
当然,这似乎会导致在批处理文件中使用它时出现其他问题,因为它会使 powershell 保持打开状态。我正在研究其他一些解决方案,它们要么只是等待一段时间让“zip”完成,要么在退出之前将源文件与完成的 zip 文件进行比较。
答案2
我为您清理了 PowerShell 脚本文件:
<#
.SYNOPSIS
Zip up files and folders
.EXAMPLE
To zip up some files:
ls c:\source\*.txt | out-zip.ps1 c:\target\archive.zip
.EXAMPLE
To zip up a folder:
gi c:\source | out-zip c:\target\archive.zip
#>
param(
[parameter(Mandatory=$TRUE,ValueFromPipeline=$TRUE)] $files,
[parameter(Mandatory=$TRUE,position=0)] [string] $path
)
if (-not $path.EndsWith('.zip')) {$path += '.zip'}
if (-not (test-path $path)) {
set-content $path ("PK" + [char]5 + [char]6 + ("$([char]0)" * 18))
}
$zipFile = (new-object -com shell.application).NameSpace([System.IO.Path]::GetFullPath($path))
$files | %{$zipfile.CopyHere($_.fullname)}
假设 out-zip.ps1 保存到C:\users\Kim\Dpcuments\WindowsPowerShell\out-zip.ps1
,下面是您需要的批处理文件。
@echo off
powershell.exe -Command "gi c:\source | C:\users\Kim\Dpcuments\WindowsPowerShell\out-zip.ps1 c:\target\archive.zip"