如何使用PowerShell在zip函数中使用数组?

时间:2013-09-19 13:03:14

标签: powershell powershell-v2.0 7zip

我仍然对脚本和“编程”都很陌生。如果您错过了任何信息,请告诉我。 这是我的工作拉链功能:

 $folder = "C:\zipthis\"
 $destinationFilePath = "C:\_archive\zipped"

   function create-7zip{
    param([string] $folder, 
    [String] $destinationFilePath)
    write-host $folder $destinationFilePath
    [string]$pathToZipExe = "C:\Program Files (x86)\7-Zip\7zG.exe";
    [Array]$arguments = "a", "-tzip", "$destinationFilePath", "$folder";
    & $pathToZipExe $arguments;
    }

Get-ChildItem $folder | ? { $_.PSIsContainer} | % {
     write-host $_.BaseName $_.Name;
     $dest= [System.String]::Concat($destPath,$_.Name,".zip");
     (create-7zip $_.FullName $dest)
     } 


create-7zip $folder $destinationFilePath

现在我想让他压缩我已经整理过的特殊文件夹:

get-childitem "C:\zipme\" | where-Object {$_.name -eq "www" -or $_.name -eq "sql" -or $_.name -eq "services"}

这个小函数找到我需要的3个文件夹www, sql and services。但我没有设法将此插入到我的zip功能中,因此确切地将此文件夹压缩并放入C:\_archive\zipped

因为使用了一个字符串而不是一个数组,所以他总是试图寻找一个名为wwwsqlservice的文件夹,但不存在。我尝试使用@(www,sql,services)放置一个数组,但我没有成功,所以最新的方法是什么,如果有的话? 它应该与powershell 2.0兼容,不需要ps3.0 cmdlet或函数。

提前感谢!

1 个答案:

答案 0 :(得分:1)

这是一个非常简单的示例,表示您要执行的操作,从函数的上下文中删除。它假设您的目标文件夹已经存在(您可以使用Test-PathNew-Item创建它们,如果它们不存在),并且您正在使用7z.exe。

$directories = @("www","sql","services")  
$archiveType = "-tzip"
foreach($dir in $directories)
{
    # Use $dir to update the destination each loop to prevent overwrites!
    $sourceFilePath = "mySourcePath\$dir"
    $destinationFilePath = "myTargetPath\$dir"

    cmd /c "$pathToZipExe a $archiveType $destinationFilePath $sourceFilePath"
}

总的来说,看起来你非常接近解决方案,需要一些小的改动来支持foreach循环。如果您确信create-7zip适用于单个文件夹,则可以将其替换为上面的cmd /c行。这是命令行中7zip的一些方便的example usages列表。