You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell中使用GnuPG通配符批量加密TXT文件报错求助

解决PowerShell中GPG通配符加密TXT文件的错误问题

这个问题的核心原因很明确:外部程序(比如GnuPG的gpg.exe)无法识别PowerShell的通配符,而PowerShell默认不会自动将*.txt这样的通配符展开成实际的文件名列表,直接传递的话,gpg会把*.txt当成一个字面意义的文件名去查找,自然会提示"找不到文件或目录"。

另外还要先纠正你代码里的一个小错误:设置别名时的路径写法有误,$env:C:\Program Files (x86)\...是错误的环境变量引用方式,正确的应该用$env:ProgramFiles(x86)来指代32位程序的安装目录。

下面给你两种可行的解决方案:

方案一:逐个处理每个TXT文件(推荐)

用Get-ChildItem获取目标文件夹里的所有TXT文件,然后通过ForEach-Object循环逐个调用gpg加密:

# 正确设置gpg的别名
Set-Alias sz "$env:ProgramFiles(x86)\GNU\GnuPG\gpg.exe"

# 获取所有TXT文件并逐个加密
Get-ChildItem -Path "C:\Users\AA\Desktop\AABB_Test\*.txt" | ForEach-Object {
    sz --encrypt --recipient "AABB (2048-bit)" $_.FullName
}

这种方式的好处是可以清晰看到每个文件的加密状态,也方便后续添加错误处理逻辑(比如某个文件加密失败时跳过或提示)。

方案二:一次性传递所有文件名

如果gpg支持一次性加密多个文件(它确实支持),你也可以先收集所有TXT文件的完整路径,再一次性传递给gpg:

Set-Alias sz "$env:ProgramFiles(x86)\GNU\GnuPG\gpg.exe"

# 收集所有TXT文件的完整路径
$targetFiles = Get-ChildItem -Path "C:\Users\AA\Desktop\AABB_Test\*.txt" | Select-Object -ExpandProperty FullName

# 一次性加密所有文件
sz --encrypt --recipient "AABB (2048-bit)" $targetFiles

这两种方案都能解决你遇到的通配符问题,你可以根据自己的需求选择使用。

内容的提问来源于stack exchange,提问作者Vel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 13:02:44