GPG提示找不到指定文件但文件存在的PowerShell脚本问题
问题原因与解决方案
核心问题
你遇到的加密报错,本质是**Start-Process的参数传递逻辑错误**:当把GPG的所有参数拼接成单个字符串传递给ArgumentList时,PowerShell会将整个字符串当作一个参数传给GPG,导致GPG无法正确解析命令和文件路径。单个过滤器时能运行只是偶然情况,参数数量少未触发解析故障。
修正后的加密代码
Get-ChildItem -Path $Source -Include $FileFilter -Recurse | ForEach-Object -Verbose { $FileFullPath = $_.FullName Write-Host "Encrypting" $FileFullPath $NewEncryptFile = $_.FullName + '.PGP' Write-Host "New file name is $NewEncryptFile." Write-Host "In test. Using GnuPG." Write-Host $NewEncryptFile Write-Host $FileFullPath # 改用数组传递参数,每个参数作为独立元素 $gpgArgs = @( "--batch", "--yes", "--output", $NewEncryptFile, "--encrypt", "--recipient", $GPGUser, $FileFullPath ) Start-Process -FilePath $GPGExePath -RedirectStandardError "E:\Scripts\error.txt" -Wait -ArgumentList $gpgArgs }
额外验证项
- 确认
$GPGExePath是GPG可执行文件的完整路径(例如"C:\Program Files\GnuPG\bin\gpg.exe"),路径含空格时数组传递会自动处理引号问题。 - 检查
$GPGUser是否为有效的GPG收件人ID或邮箱,避免因收件人配置错误间接引发异常。
内容的提问来源于stack exchange,提问作者user2073183
相关产品推荐
相关产品推荐

