如何阻止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
相关产品推荐
相关产品推荐

