我在C:\ Desktop \ Mobile。
位置有以下这些文件 Apple_iphone6.dat
Apple_iphone7.dat
Samsung_edge7.dat
Samsung_galaxy.dat
Sony_experia.dat
Sony_M2.dat
我需要创建一个将类似文件写入单个zip的脚本。所以文件Apple_iphone6.dat和Apple_iphone7.dat必须是单个zip。 所以创建的最终zip文件将是:
Apple_Files_Timestamp.zip
Samsung_Files_Timestamp.zip
Sony_Files_Timestamp.zip
我试过这个
Get-ChildItem C:\Desktop\Mobile -Recurse -File -Include *.dat | Where-Object { $_.LastWriteTime -lt $date } | Compress-Archive -DestinationPath C:\Desktop\Mobile
但它给了我错误' Compress-Archive'不被识别为cmdlet的名称。
如何才能使此代码生效?
答案 0 :(得分:2)
Pre Powershell v5你可以使用它。无需额外下载。
$FullName = "Path\FileName"
$Name = CompressedFileName
$ZipFile = "Path\ZipFileName"
$Zip = [System.IO.Compression.ZipFile]::Open($ZipFile,'Update')
[System.IO.Compression.ZipFileExtensions]::CreateEntryFromFile($Zip,$FullName,$Name,"optimal")
$Zip.Dispose()
答案 1 :(得分:2)
你有两个问题,我会尝试总结这两个问题。
<强> 1。压缩文件
要使用Compress-Archive命令,您需要使用@LotPings已评论的PowerShell 5。你可以:
如果你不能做其中任何一个,你可以
<强> 2。分组文件
对文件进行分组后,您可以轻松地将它们用于压缩命令,就像您已经尝试过的那样。正确的分组将通过以下方式实现:
$Files = Get-ChildItem 'C:\Desktop\Mobile'
$Groups = $Files | ForEach-Object {($_.Name).split('_')[0]} | Select-Object -Unique
foreach ($Group in $Groups) {
$Files | where Name -Match "^$Group" | Compress-Archive "C:\Desktop\Mobile\$Group.7z"
}
答案 2 :(得分:0)
使用Powershell 2.0您无法使用Compress-Archive,您需要下载原始终端可执行文件以从here压缩和解压缩文件。
您可以使用:
zip <path> <zip_name> -i <pattern_files>
在你的例子中:
zip "C:\Desktop\Mobile" Apple_Files_Timestamp.zip -i Apple*.dat
zip "C:\Desktop\Mobile" Samsung_Files_Timestamp.zip -i Samsung*.dat
zip "C:\Desktop\Mobile" Sony_Files_Timestamp.zip -i Sony*.dat
如果您需要使用adittional zip选项,请访问zip manual。
答案 3 :(得分:0)
$TimeStamp = Get-Date -Format "yyyyMMddhhmmss"
Get-ChildItem *.dat|
Group-Object {($_.Name).split('_')[0]}|
ForEach-Object {
$Make = $_.Name
Foreach($File in $_.Group){
"{0,20} --> {1}_Files_{2}.zip" -f $File.Name,$Make,$TimeStamp
}
}
示例输出:
> .\SO_44030884.ps1
Samsung_edge7.dat --> Samsung_Files_20170517081753.zip
Samsung_galaxy.dat --> Samsung_Files_20170517081753.zip
Apple_iphone6.dat --> Apple_Files_20170517081753.zip
Apple_iphone7.dat --> Apple_Files_20170517081753.zip
Sony_M2.dat --> Sony_Files_20170517081753.zip
Sony_experia.dat --> Sony_Files_20170517081753.zip
此链接可能会有助Module to Synchronously Zip and Unzip using PowerShell 2.0