如何在PowerShell中调用带参数的Java类并重定向输出(批处理转写场景)
PowerShell 转换实现方案
你原批处理中的%1为批处理首入参、!cntr!为延迟扩展的计数器变量,在PowerShell中需要先对应定义两个变量,再通过参数数组的方式调用Java程序,避免转义异常。
完整实现代码
# 1. 定义变量,替换为你实际的参数值/计数器值 # 如果是PowerShell脚本入参,$param1也可以直接取$args[0] $param1 = "你的参数值" $cntr = 1 $javaExePath = "C:\Temp\User\Java\jre8\bin\java.exe" # 提前创建Output目录避免路径不存在报错 if (-not (Test-Path -Path "Output")) { New-Item -ItemType Directory -Path "Output" | Out-Null } # 2. 构建Java参数数组(PowerShell调用外部程序最稳定的传参方式,无需额外转义) $javaArguments = @( "-cp", "class.jar", "classname", "url", "Output/create-${param1}_${cntr}.xml", "db2${param1}.xsl" ) # 可选:解决输出乱码问题,根据Java实际输出编码调整,GBK对应[System.Text.Encoding]::GetEncoding(936) [Console]::OutputEncoding = [System.Text.Encoding]::UTF8 # 3. 调用Java并将标准输出重定向到目标文件 & $javaExePath $javaArguments > "Output\result-${param1}_${cntr}.xml"
常见问题说明
- 不要直接拼接整段命令传给调用运算符
&,会触发空格、引号的转义异常,用数组传参是最稳定的写法 - 之前尝试的
Start-Process默认不会把程序输出返回当前Shell,如需用该方法需要添加-Wait -NoNewWindow -RedirectStandardOutput 目标文件路径参数,同步执行场景下不如直接用&简洁 Start-Job为后台任务方案,不适用于这种需要同步执行、直接获取输出的场景,会额外增加变量传递、结果获取的复杂度
内容的提问来源于stack exchange,提问作者Yvain
相关产品推荐
相关产品推荐

