PowerShell脚本传递C:\路径报错,寻求解决方案
问题分析与解决
你的问题出在几个关键细节上:
Resolve-Path返回值处理错误Resolve-Path返回的是PathInfo对象而非纯字符串路径,直接传给New-Item会触发"路径格式非法"的错误,必须提取对象的.Path属性获取字符串路径。无需创建根目录
C:\C:\作为系统根目录必然已存在,调用New-Item尝试创建它本身就会报错,这一步完全多余。WinZip解压命令缺少目标文件夹参数
你把$outputFolder注释掉了,导致WinZip不知道解压目标位置;同时要注意WZUNZIP的参数顺序:-d后需要直接紧跟目标路径。
修改后的脚本
$sourceFolder = "C:\Temp" $winZipExe = "C:\Program Files\WinZip\WZUNZIP.EXE" $destinationFolder = "c:\" # 询问用户解压密码 $password = Read-Host -Prompt "Please enter the password for the .zipx files" $passwordCommand = "-s$password" # 简化密码参数拼接方式 Get-ChildItem -Path $sourceFolder -Filter *.zipx | ForEach-Object { $zipxFile = $_.FullName # 提取纯字符串格式的目标路径 $outputFolder = (Resolve-Path $destinationFolder).Path # 调用WinZip解压到指定路径 & $winZipExe -e -d "$outputFolder" $passwordCommand "$zipxFile" }
额外说明
- 如果后续需要处理非根目录的目标路径,可以保留目录创建逻辑但增加存在性判断:
if (-not (Test-Path $outputFolder)) { New-Item -ItemType Directory -Path $outputFolder -Force | Out-Null } - WinZip
WZUNZIP参数说明:-e表示提取文件,-d <路径>指定解压目标,-s<密码>为加密文件的密码参数(注意-s和密码之间无空格)。
内容的提问来源于stack exchange,提问作者Nenad
相关产品推荐
相关产品推荐

