使用Windows快捷方式结合PowerShell解压Zip文件的求助
解决Windows快捷方式调用PowerShell解压同目录Zip文件的问题
你的原命令存在核心问题:$MyInvocation.MyCommand.Definition返回的是powershell.exe的安装路径,而非快捷方式所在的文件夹,因此无法正确定位同目录下的file.zip。以下是两种可行的解决方案:
方案一:利用快捷方式起始位置(默认场景首选)
默认情况下,新建的快捷方式「起始位置」会自动设置为自身所在文件夹,直接利用这个特性即可:
- 右键快捷方式 → 属性 → 目标栏替换为以下命令:
powershell.exe -ExecutionPolicy Bypass -NoExit -Command "Expand-Archive -Path `"$PWD\file.zip`" -DestinationPath `"$Env:USERPROFILE\Desktop\Extracted`"" - 说明:
$PWD是PowerShell内置变量,启动时会自动读取快捷方式的「起始位置」路径,也就是zip文件所在的文件夹。
方案二:强制获取快捷方式路径(适用于起始位置被修改的场景)
如果快捷方式的「起始位置」被手动改动,用以下命令确保能正确定位zip文件:
- 替换快捷方式目标为:
powershell.exe -ExecutionPolicy Bypass -NoExit -Command "$shortcutPath = Split-Path -Path (New-Object -ComObject WScript.Shell).CreateShortcut((Get-WmiObject Win32_Process -Filter 'ProcessId = $PID').CommandLine.Split('`"')[1]).FullName -Parent; Expand-Archive -Path `"$shortcutPath\file.zip`" -DestinationPath `"$Env:USERPROFILE\Desktop\Extracted`"" - 说明:通过WMI获取当前PowerShell进程的命令行,提取快捷方式路径后解析其实际所在文件夹,彻底摆脱对起始位置的依赖。
额外优化建议
- 不需要保留PowerShell窗口的话,去掉命令中的
-NoExit参数 - 加上
-Force参数可以覆盖Extracted文件夹中已存在的文件,修改后的命令片段:Expand-Archive -Path ... -DestinationPath ... -Force - 添加文件存在检查,避免无意义报错:
powershell.exe -ExecutionPolicy Bypass -Command "$zipPath = Join-Path $PWD 'file.zip'; if (Test-Path $zipPath) { Expand-Archive -Path $zipPath -DestinationPath `"$Env:USERPROFILE\Desktop\Extracted`" -Force } else { Write-Error 'file.zip未在快捷方式所在文件夹找到' }"
内容的提问来源于stack exchange,提问作者phil
相关产品推荐
相关产品推荐

