PowerShell实现解压ZIP并将内部HTML重命名为ZIP文件名
解决ZIP解压后HTML文件重命名为原ZIP文件名的问题
我来帮你梳理这个解决方案的思路,以及关键代码的作用:
你的核心需求是:解压ZIP后,把里面的HTML文件重命名为原ZIP文件的名称(不带.zip后缀),由于原程序生成的ZIP里的HTML文件名不可控,我们需要通过「临时目录中转」的方式来实现精准重命名。
最终完整脚本
#Location Of ZIP Files Defined Here $ZipFilesPath = "C:\Test\"; #Unzip To Temp Folder Defined Here $TempPath = "C:\Test\Temp" #Create Our Temp File If It Doesnt Exist (Will Be Deleted Again) If(!(test-path $TempPath)) { New-Item -ItemType Directory -Force -Path $TempPath } $Shell = New-Object -com Shell.Application $Location = $Shell.NameSpace($TempPath) $ZipFiles = Get-Childitem $ZipFilesPath -Recurse -Include *.ZIP $FileCounter = 1 #Clear Initilisation Vars from Console clear foreach ($ZipFile in $ZipFiles) { #Get The Base Filename without the Filepath $ZipFileActualName = [io.path]::GetFileNameWithoutExtension($ZipFile.FullName) write-host "File: " $ZipFileActualName $ZipFolder = $Shell.NameSpace($ZipFile.fullname) $Location.Copyhere($ZipFolder.items(), 1040) # --- 新增的重命名核心逻辑 --- # 获取临时目录里的所有HTML文件 $HtmlFiles = Get-ChildItem $TempPath *.html # 将每个HTML文件重命名为原ZIP的名称,并移动到目标路径 $HtmlFiles |% {Move-Item $_.Fullname "$ZipFilesPath/$ZipFileActualName.html"} # --- 核心逻辑结束 --- #Move Along to Next File $FileCounter++ } #Remove Our .ZIP Folders Get-ChildItem -Path $ZipFilesPath -Include *.zip* -File -Recurse | foreach { $_.Delete() } #Remove Our Temp Folder Remove-Item –path $TempPath –recurse
关键修改点说明
和你最初的脚本相比,主要做了这些调整:
- 新增临时目录:创建
$TempPath作为解压中转目录,确保每次处理单个ZIP时,能精准找到当前解压出来的HTML文件,避免和其他文件冲突 - 修改解压目标:把原来直接解压到
$ZipFilesPath改成解压到临时目录$TempPath - 插入重命名逻辑:在解压完成后(
Copyhere之后),加入了获取HTML文件、重命名并移动到最终目录的代码,这里用$ZipFileActualName(原ZIP的无后缀名称)作为新的HTML文件名 - 新增清理步骤:处理完所有ZIP后,删除原ZIP文件和临时目录,保持环境整洁
代码插入位置的说明
你最初的脚本里,解压操作是$Location.Copyhere($ZipFolder.items(), 1040),重命名的核心逻辑就需要紧跟在这一行之后,因为只有解压完成后,才能拿到需要重命名的HTML文件。
内容的提问来源于stack exchange,提问作者Soprono
相关产品推荐
相关产品推荐

