用于创建zip的位置变量问题

时间:2015-08-18 13:09:49

标签: powershell zip

我正在编写一个PS脚本来获取.axml中的压缩文件夹,将其重命名为.zip,仅使用" LMS"提取某些文件。在名称中,重命名所有" LMS"文件丢弃前9个字符。然后重新压缩那些文件。 我只是在我的zip命令中遇到问题,因为我需要使用变量作为位置,因为.axml每天顺序不同。

我的代码并不完美,我还有很多需要做的清理工作,并且有许多未使用的变量,因为我正在试图弄清楚如何获得我需要的东西。如果我硬编码脚本执行完美的位置,但正如我所说,问题是zip存档将始终以不同的名称命名。我想在重命名文件后,我可以将它们全部复制到一个预先命名的文件夹然后压缩它?

无论如何,我的代码如下,任何有关如何使用变量执行此操作的见解都将非常感激。如果您想自己运行它,您只需要一个包含少量文件的zip存档(将其命名为9个字符,然后至少为lms,它们需要为.pdf)并且它应该可以工作: - )

Zip文件夹命令:

#Re-zip only files with LMSxxx.pdf
$source = $UnzippedFolder
$destination =  $RootPath + "\upload.zip"
If(Test-path $destination) {Remove-Item $destination}
Add-Type -AssemblyName "system.io.compression.filesystem"
[io.compression.zipfile]::CreateFromDirectory($source, $destination)

错误:

Exception calling "CreateFromDirectory" with "2" argument(s): "Could not find
a part of the path 'C:\Users\USER\FOLDER\SOURCE'."
At C:\Users\USER\FOLDER\SCRIPT.ps1:105 char:1
+ [io.compression.zipfile]::CreateFromDirectory($source, $destination)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : DirectoryNotFoundException`

完整代码可在此处找到: https://goo.gl/x6Gx0Z

1 个答案:

答案 0 :(得分:0)

尼克,

我假设您已经清理了错误输出,问题是您传递的字符串中包含空格,例如" C:\ Users \ Nick Corsentino .."。

修复是传递旧的8.3路径格式。我利用了我在下面找到的功能(对于无法归因于源代码而道歉,但不记得我发现它的位置)。

function Get-ShortPathName ($DirPath) {

$fso = New-Object -ComObject Scripting.FileSystemObject

Get-Item -path $DirPath | ForEach-Object{

    if($_.PSIsContainer) {
        return $fso.GetFolder($_.FullName).ShortPath
        }
    else {
        return $fso.GetFile($_.FullName).ShortPath
        }
    }
}

然后就叫它......

$source = Get-ShortPathName $source

这个过程解决了我的问题。

对于其他查看代码的人来说,在$ destination前面加上一个路径而不仅仅是一个文件名。这很关键或者是调用 -

[io.compression.zipfile]::CreateFromDirectory($source, $destination)

将文件放入" C:\ Users \ Nick Corsentino"目录,而不是将其放入当前(脚本执行)目录。