本帖最后由 5i365 于 2022-3-18 11:21 编辑
回复 3#
大侠好, 经过多次测试, $name文件会替换掉脚本相同目录下的同名文件, 所以移到了临时文件夹进行处理, 一些其它细节也有精简, 加了一些注释, 再次感谢!
________________________________________________________________________________________________________
本人所发所有贴子或代码, 路过的大侠,若认为: 含有瑕疵, 需要改进, 可以增强优化精简之处, 请不吝赐教,感激不尽!
- #作者: idwma@bathome #润色: 5i365@bathome.
-
- #理解的要点:
- #shell.application对象包含可以直接处理zip文件和伪zip文件的Namespace, MoveHere, Items等方法
- #伪zip文件也是zip文件,可以当成zip文件来处理
- #zip文件因为在win系统下直接可以像文件夹一样打开浏览,所以将zip文件理解为zip文件夹
-
- function unzip_plus($path, $name, $code)
- {
- $shell = New-Object -com shell.application
- try
- {
- #1用重命名的方法给伪zip文件添加zip扩展名,方便shell.application对象的方法进行处理
- $z = "$path.zip"
- ren $path $z
-
- #2将zip中的要处理的文件移动到临时文件夹
- # Namespace后的()可理解为:放置要处理的文件的文件夹
- # MoveHere后的()可理解为:移动到前面文件夹中的要处理的文件
- $shell.Namespace("$env:TEMP").MoveHere("$z\$name")
-
- #3 $code代码中的$name变量要替换为要处理文件的实际临时文件夹下的路径
- $temp_name = "$env:TEMP\$name"
- $code.Replace('$name', $temp_name) | iex
-
- #4 如果处理后的文件还存在,就移动回原zip文件夹
- # 把zip文件理解成一个文件夹,来的更简单
- if (test-path $temp_name)
- {
- $shell.NameSpace("$z").MoveHere($temp_name)
- }
-
- #5需要加延时,否则已处理的文件无法移回去原zip文件夹
- sleep 1
-
- #6 重命名回zip扩展名
- ren $z $path
-
- #7如果成功执行返回$true; 下面的异常则为失败返回$false
- return $true
- }
- catch { $false }
- }
-
- $path = "C:\Users\Administrator\Desktop\test.map"
-
- $name = "123.txt"
-
- $code = @'
- ac $name "我是新加的文本"
- '@
-
- unzip_plus -path $path -name $name -code $code
复制代码
|