out-zip.ps1 的 powershell cmd 脚本

out-zip.ps1 的 powershell cmd 脚本

我在网上找到了这个 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"

相关内容