技术标签: 解压缩 7z powershell haozip script
因为windows内置了zip格式文件的解压缩,所以powershell中可以直接调用powershell的函数就能实现zip解压缩.
利用powershell内置功能实现zip解压缩的代码如下:
# 调用powershell内置功能解压缩 $package 指定的 zip 文件到 $targetFolder
# 如果 $targetFolder为空则默认解压到 $package所在文件夹
function unzip([string]$zipFile,[string]$targetFolder){
# 检查是否为zip后缀
if ( Test-Path -Path $zipFile -PathType Leaf){
echo "not found:$zipFile "
exit -1
}
if(!$zipFile.ToLower().EndsWith(".zip")){
echo "$zipFile not zip file"
exit -1
}
# targetFolder为空时解压到zipFile同级文件夹的同名文件夹
if(! $targetFolder){
$targetFolder=(Get-Item $zipFile).Directory
}
$shellApp = New-Object -ComObject Shell.Application
$files = $shellApp.NameSpace($zipFile).Items()
echo "unzip to $targetFolder..."
$shellApp.NameSpace($targetFolder).CopyHere($files)
}
但是在powershell下对其他的压缩格式(.7z,.tar,.gz,.rar…)就需要调用第三方工具来实现。
7z和HaoZip(好压)都提供了命令行解压缩工具,所以可以利用7z或HaoZip来实现
利用7z和HaoZip(好压)实现命令行解压的powershell实现代码如下:
unpack.ps1
[CmdletBinding()]
param(
#[Parameter(Mandatory=$true,HelpMessage="输入要解压的压缩包名称(.zip,.gz...)")]
[string]$package,
[string]$targetFolder,
[switch]$quiet,
[switch]$help
)
# 上一条命令执行出错则中止脚本执行,并输出调用堆栈信息
function exit_on_error(){
if ( ! $? ){
echo "exit for error:$1 "
exit -1
}
}
# 调用 haozip解压文件
function unpack_haozip([string]$exe,[string]$package,[string]$targetFolder){
$item=Get-Item $exe
$unpack_exe=Join-Path -Path $item.Directory -ChildPath ('HaoZipC'+$item.Extension)
$cmd="""$unpack_exe"" x $package -o$targetFolder -y"
if( $quiet ){
# -sn:禁止文字输出
$cmd+=' -sn'
}
cmd /c $cmd
exit_on_error
}
# 调用 7z解压文件
function unpack_7z([string]$exe,[string]$package,[string]$targetFolder){
$item=Get-Item $exe
$unpack_exe=Join-Path -Path $item.Directory -ChildPath ('7z'+$item.Extension)
$cmd="""$unpack_exe"" x $package -o$targetFolder -y"
if(! $quiet){
# -bb[0-3] : set output log level
$cmd+=' -bb1'
}
cmd /c $cmd
exit_on_error
if( $package.ToLower().EndsWith('.tar.gz')){
$tar=Join-Path -Path $targetFolder -ChildPath (Get-Item $package).BaseName
$cmd="""$unpack_exe"" x $tar -o$targetFolder -y"
if(!$quiet){
$cmd+=' -bb1'
}
cmd /c $cmd
exit_on_error
del -Force -Recurse $tar
exit_on_error
}
}
# 查看后缀为$suffix的文件的本机文件关联程序
function find_associated_exe([string]$suffix){
$Extension,$FileType=(cmd /c assoc $suffix) -split '='
if(!$FileType){
Write-Host "请用手工指定 `$UNPACK_TOOL 变量指定解压缩软件,define `$UNPACK_TOOL to fix it"
exit -1
}
$FileType,$Executable= (cmd /c ftype $FileType) -split '='
if( ! $Executable ){
exit -1
}
# exe 全路径
($Executable -replace '^([^"\s]+|"[^"]+?")(\s.+)?$','$1') -replace '(^"|"$)',''
}
# 为后缀为$suffix压缩包寻找解压缩工具
# 如果定义了 $UNPACK_TOOL 则优先使用它做为解压缩工具
# 否则 调用 assoc,ftype 来查找对应的解压缩工具,如果找不到就报错退出
function find_unpack_function([string]$suffix){
if($UNPACK_TOOL){
$exe=$UNPACK_TOOL
}else{
$exe=find_associated_exe $suffix
}
$fun="unpack_"+ ((Get-Item $exe).BaseName.toLower() -replace '^.*(7z|haozip).*$','$1')
# 返回解压缩函数名 unpack_xxxx
$fun
# 返回解压缩工具软件的exe文件(全路径)
$exe
}
# 解压缩 $package 指定的文件到 $targetFolder
# 如果 $targetFolder为空则默认解压到 $package所在文件夹
function unpack([string]$package,[string]$targetFolder){
if(! $targetFolder){
$targetFolder=(Get-Item $package).Directory
}
$index=$package.LastIndexOf('.')
if($index -lt 0){
# 没有文件后缀,无法识别,报错退出
echo "unkonw file fomat $package"
exit -1
}
if(!( Test-Path -Path $targetFolder -PathType Container)){
mkdir $targetFolder
exit_on_error
}
$suffix=$package.Substring($index)
#if ( $suffix -eq '.zip' ){
# unzip $package $targetFolder
#}else{
$fun,$exe=find_unpack_function $suffix
# 调用 unpack_xxxx(haozip|7z)解压
&$fun $exe $package $targetFolder
#}
}
# 指定命令解压工具
# 这里指定的exe,是支持命令行运行的版本,
# 比如7z的 GUI版本的可执行文件是 7zfm.exe,命令行版本则是7z.exe
# 好压(HaoZip)的GUI版本的可执行文件是 HaoZip.exe,命令行版本则是 HaoZipC.exe
# 如果不设置此值,脚本会通过 assoc,ftype命令查找,但有可能查找不到
#$UNPACK_TOOL="C:\Program Files\7-Zip\7z.exe"
#$UNPACK_TOOL="C:\Program Files\2345Soft\HaoZip\HaoZipC.exe"
# 运行过程中是否显示显示详细的进行步骤
# 输出帮助信息
function print_help(){
echo "用法: $my_name [可选项...][压缩包文件]
PowerShell解压文件工具
选项:
-p,-package 要解压的文件(.zip,.tar,.gz...)
-q,-quiet 不显示详细信息
-h,-help 显示帮助信息
作者: [email protected]
"
}
$my_name=$($(Get-Item $MyInvocation.MyCommand.Definition).Name)
if($help){
print_help
exit 0
}
# 根据命令行参数对$package解压缩
unpack $package $targetFolder
文章浏览阅读4.5k次。VS中添加LIb库及头文件(外部依赖项)的步骤:1、添加工程的头文件目录:工程—属性—配置属性—c/c+±–常规—附加包含目录:加上头文件存放目录。2、添加文件引用的lib静态库路径:工程—属性—配置属性—链接器—常规—附加库目录:加上lib文件存放目录。然后添加工程引用的lib文件名:工程---属性---配置属性---链接器---输入---附加依赖项:加上lib文件名。3、添加工程引用..._vs项目中依赖库的头文件
文章浏览阅读1.7k次,点赞2次,收藏7次。背景抽奖,是一种典型的互动玩法形式。无论是大V的粉丝抽奖,还是活动会场的参与抽奖,这种起源于彩票开奖的互动玩法,同时兼顾了高期待感和低预期的特征,让活动在成本控制之余又能有惊喜和引爆点,这样的优势让其在各种运营场景中幻化万千,大行其道。在闲鱼各种互动场与营销活动中,抽奖自然也是一个相当高频使用的互动玩法。众所周知,越是经典的玩法,业务需求就越发别出机杼,在参与条件、开奖展示、奖品规则等各方面千变万..._随机中奖逻辑
文章浏览阅读1.1w次,点赞2次,收藏8次。一般对颜色空间的图像进行有效处理都是在HSV空间进行的,然后对于基本色中对应的HSV分量需要给定一个严格的范围,下面是通过实验计算的模糊范围(准确的范围在网上都没有给出)。H: 0 — 180S: 0 — 255V: 0 — 255此处把部分红色归为紫色范围:目前在计算机视觉领域存在着_hsv颜色相似度
文章浏览阅读1.7k次。一、生存分析基本概念1、事件(Event)指研究中规定的生存研究的终点,在研究开始之前就已经制定好。根据研究性质的不同,事件可以是患者的死亡、疾病的复发、仪器的故障,也可以是下岗工人的再就业等等。2、生存时间(Survival time)指从某一起点到事件发生所经过的时间。生存是一个广义的概念,不仅仅指医学中的存活,也可以是机器出故障前的正常运行时间,或者下岗工人再就业前的待业时间等等。有的时候甚..._cox比例风险回归模型spss
文章浏览阅读144次。使用场景用于修改上次提交,可修改上次提交的commit message信息,也可修改commit 的内容用法上次commit 内容不满意,代码并未合并,需要有改动的地方:修改文件git addgit commit – amendgit push以上修改并不产生新的commit id但是如果修改文件git addgit commit “”git push此办法会产生新的commit id,合并的人需要将两次commit id合并..._git commit --amend 之后还要push吗
文章浏览阅读891次。1.1016这是一道简单题,主要要考虑到,比如说108,8,2这种类似的情况,其中8被认为是08,所以最后两位相同,输出-1。#include <stdio.h>#include <stdlib.h>#include <string.h>int main(){char a[20], b[20], *p, *q;int k, a1, b1, len1, len2, a2, b2;while (scanf("%s%s%d", a, b, &a..._九度oj
文章浏览阅读3.1w次,点赞6次,收藏28次。HTML5实现播放RTMP协议视频<!doctype html><html><head><meta charset="utf-8"><title>Video.js 7</title> <link href="css/video-js.min.css" rel="stylesheet"> <sty..._网页使用flash播放rtsp
文章浏览阅读1.2w次,点赞23次,收藏19次。在安装完tesseract, pytesseract后执行测试命令,发现打印如下错误:Error opening data file \Program Files (x86)\Tesseract-OCR\tessdata/eng.traineddata Please make sure the TESSDATA_PREFIX environment variable is set to the..._error opening data file ./eng.traineddata
文章浏览阅读92次。// 通用修饰符 // stop 实现阻止冒泡的修饰符// prevent 实现阻止默认行为的修饰符// once 表示单次触发的修饰符// self 表示绑定事件的元素与触发事件的元素是同一个元素// 鼠标修饰符// left 鼠标点击左键// right 鼠标点击右键// middle 鼠标中间件// 辅助修饰符// ctrl 点击 ctrl 辅助键// shift 点击 shift 辅助键盘// alt 点击 alt 辅助键// meta_vue使用less还是sass好
文章浏览阅读79次。I found a helpful post to speed up wordpress website or blog https://www.keycdn.com/blog/speed-up-wordpress/With some other optimizations, I am also using below code on my site in .htaccess file (usua..._html5设置accept-encoding
文章浏览阅读566次。想在应用内获取当前swarm节点的IP使用.net 6框架 vs2022开发工具。_docker swarm 指定容器ip
文章浏览阅读922次。Spire.Office 8.6.0更新已发布。在该版本中,Spire.PDF支持转换多页PDF文档为单个SVG文件;Spire.XLS新增了优化删除行的速度的方法;Spire.Presentation支持为TextFrame设置栏数。此外,许多已知问题也在该版本中被成功修复。_spire.office developer subscription(开发版本)