我仍然对脚本和“编程”都很陌生。如果您错过了任何信息,请告诉我。 这是我的工作拉链功能:
$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或函数。
提前感谢!
答案 0 :(得分:1)
这是一个非常简单的示例,表示您要执行的操作,从函数的上下文中删除。它假设您的目标文件夹已经存在(您可以使用Test-Path
和New-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列表。