我正在编写一个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
答案 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"目录,而不是将其放入当前(脚本执行)目录。