在PowerShell脚本中循环执行Java Jar命令遇阻求解决方案
可行解决方案
方法1:直接在循环中执行命令
这是最简单可靠的方式,PowerShell可以直接调用外部可执行文件,无需额外封装:
# 循环执行5次示例 for ($i = 1; $i -le 5; $i++) { java -jar some_program.jar "C:\Users\the_path_to_screenshot_folder\" # 可选:每次执行后等待10秒,根据需求调整 Start-Sleep -Seconds 10 } # 无限循环(按Ctrl+C终止) while ($true) { java -jar some_program.jar "C:\Users\the_path_to_screenshot_folder\" Start-Sleep -Seconds 10 }
方法2:用参数数组存储命令(避免解析错误)
如果需要将命令参数存储起来,推荐用参数数组,防止路径含空格或特殊字符导致的解析问题:
# 定义参数数组 $javaArgs = @("-jar", "some_program.jar", "C:\Users\the_path_to_screenshot_folder\") # 循环执行 for ($i = 1; $i -le 5; $i++) { & java $javaArgs Start-Sleep -Seconds 10 }
方法3:正确使用Start-Process
之前失败大概率是参数传递错误,Start-Process的-ArgumentList需要拆分每个参数单独传入:
for ($i = 1; $i -le 5; $i++) { # -Wait参数确保PowerShell等待Java程序执行完毕再进入下一次循环 Start-Process -FilePath "java" -ArgumentList "-jar", "some_program.jar", "C:\Users\the_path_to_screenshot_folder\" -Wait # 可选:隐藏Java程序窗口 # Start-Process -FilePath "java" -ArgumentList "-jar", "some_program.jar", "C:\Users\the_path_to_screenshot_folder\" -Wait -WindowStyle Hidden Start-Sleep -Seconds 10 }
方法4:后台执行循环(Start-Job)
如果需要在后台执行循环,使用Start-Job时要注意通过参数传递外部变量:
# 定义后台作业的执行逻辑 $jobScript = { param($jarName, $targetFolder) while ($true) { java -jar $jarName $targetFolder Start-Sleep -Seconds 10 } } # 启动后台作业,传递参数 $job = Start-Job -ScriptBlock $jobScript -ArgumentList "some_program.jar", "C:\Users\the_path_to_screenshot_folder\" # 查看作业状态 Get-Job $job # 如需查看作业输出(若Java程序有控制台输出) # Receive-Job $job
内容的提问来源于stack exchange,提问作者negativeattitude
相关产品推荐
相关产品推荐

