如何从我的输出创建几个zip文件夹(功能)?

时间:2013-08-29 14:35:19

标签: powershell powershell-v2.0 7zip

我正在尝试压缩我在名为services的文件夹中找到的所有文件夹。

我使用Get-Childitem来查找这些文件夹,我想在管道之后添加该功能,但它不能按我想要的方式工作。 zip文件应该与文件夹本身具有相同的名称,因此我尝试使用“$ .FullName”命名,destinationpath是文件夹“C:\ com \ $ .Name”

这是我的剧本:

Get-ChildItem "C:\com\services" | % $_.FullName 


$folder = "C:\com\services"
$destinationFilePath = "C:\com"

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

2 个答案:

答案 0 :(得分:1)

首先。声明文件夹和目标路径等变量。

二。更改您的7zip文件夹路径,因为我在(Program Files)。

 #declare variables
    $folder = "C:\com\services"
    $destPath = "C:\destinationfolder\"

    #Define the function
    function create-7zip{
    param([String] $folder, 
    [String] $destinationFilePath)
    write-host $folder $destinationFilePath
    [string]$pathToZipExe = "C:\Program Files\7-Zip\7z.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)
     } 

$_.PSIsContainer只会找到文件夹,构建目标路径变量$dest,然后调用该函数。我希望这会有所帮助。

答案 1 :(得分:1)

如果我理解正确,你想把gci的输出传递给你的Create-7Zip函数,并让函数创建一个以你传入的每个目录命名的zip文件,如下所示:

gci | ?{ $_.PSIsContainer } | Create-7Zip

要执行此操作,您需要使用您正在编写的cmdlet来支持从管道中获取值,您可以使用params()列表中的[Parameter]属性来执行此操作。

function Create-7Zip
{
  param(
    [Parameter(ValueFromPipeline=$True)]
    [IO.DirectoryInfo]$Directory #we're accepting directories from the pipeline.  Based on the directory we'll get the zip name
    );
    BEGIN
    {
        $7Zip = Join-Path $env:ProgramFiles "7-Zip\7z.exe"; #get executable
    }
    PROCESS
    {
        $zipName = $("{0}.zip" -f $Directory.Name);
        $7zArgs = Write-Output "a" "-tzip" $zipName $directory.FullName; #Q&D way to get an array
        &$7Zip $7zArgs
    }
}



Usage:
    #Powershell 3.0
    get-childitem -directory | Create-7Zip
    #Powershell 2
    get-childitem | ?{ $_.PSIsContainer } | Create-7Zip

你会看到7zip的输出;您可以通过将其传送到其他地方来捕获此信息。