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

如何阻止PowerShell脚本中带星号的参数传给Java程序时被展开为文件名?

阻止PowerShell中的通配符展开问题

我明白你遇到的问题了——PowerShell默认会把命令行里的通配符(比如*.txt)自动展开成目录中匹配的所有文件名,而不是把它作为一个原始字符串传递给你的Java程序。这就是为什么你期望输出*.txt,却得到了1.txt、2.txt这类实际文件名的原因。

下面是几种解决方法,你可以根据需求选择:

方法1:用引号包裹通配符参数

调用脚本时,把*.txt用双引号或者单引号括起来,这样PowerShell就会把它当成一个完整的字符串参数传递,不会进行通配符展开:

.\test.ps1 com.test.Test "*.txt"

或者用单引号(单引号在PowerShell中不会解析变量和通配符,更适合传递原始字符串):

.\test.ps1 com.test.Test '*.txt'

方法2:使用停止解析符号--%

如果你希望后面的所有参数都不被PowerShell解析(包括通配符、变量等),可以使用--%停止解析符号,它会让PowerShell把后面的内容原样传递给脚本:

.\test.ps1 com.test.Test --% *.txt

这个方法特别适合需要传递多个特殊字符参数的场景,不需要给每个参数都加引号。

额外说明:修改脚本的局限性

你可能会想能不能修改PowerShell脚本本身来解决这个问题,但实际上,当你执行.\test.ps1 com.test.Test *.txt时,PowerShell在调用脚本之前就已经完成了通配符展开,脚本接收到的已经是展开后的文件名列表,所以脚本层面无法恢复原始的*.txt参数。因此,最可靠的解决方式还是在调用时阻止展开。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 11:05:18