PowerShell中else语句内Write-Output仅输出空行无有效内容问题求助
问题原因排查
- 分支结构逻辑错误:你当前写的所有命令判断都是独立的
if语句,只有最后一个if ($command -eq "sys.win.cleartext.vtext.show")和后续的elseif、else属于同一个判断分支组。也就是说只有当用户输入不等于sys.win.cleartext.vtext.show时,才会进入后续的elseif/else判断,就算用户输入匹配了前面其他的已知命令,也依然会走到后面的分支判断逻辑,产生多余输出。 - 变量名拼写错误:后续两个
elseif分支判断的变量是$cs,但你存储用户输入的变量是$command,$cs属于未定义变量,值恒为$null,所以这两个分支永远不会命中。 - 可选优化:
Write-Output是将内容发送到PowerShell管道,若无后续管道处理才会输出到控制台,在自定义交互场景下建议用直接输出到控制台宿主的Write-Host,避免输出被意外捕获导致不显示。
修复方案
把所有命令判断整合到同一个if-elseif-else分支组,修正变量名拼写,调整输出语句即可。
修复后代码
while ($true) { $Title = "Falcon Os v1 alpha cli" $host.UI.RawUI.WindowTitle = $Title $global:current_path = (Get-Location).Path $starterterminalpromptone = $current_path $starterterminalprompttwo = " >>> " $prompt = $starterterminalpromptone + ". Type 'sys.win.man.help' for help " + $starterterminalprompttwo Write-Host $prompt -NoNewLine $command = $Host.UI.ReadLine() if ($command -eq "sys.win.info.nl") { sys.win.info.nl } elseif ($command -eq "sys.win.man.help") { sys.win.man.help } elseif ($command -eq "sys.command.output.out.echo.command.variable") { sys.command.output.out.echo.command.variable } elseif ($command -eq "sys.exit") { break } elseif ($command -eq "sys.path.cd") { sys.path.cd } elseif ($command -eq "sys.path.view") { sys.path.view } elseif ($command -eq "sys.screen.cls") { cls } elseif ($command -eq "sys.path.mkdir") { sys.path.mkdir } elseif ($command -eq "sys.path.makefile") { sys.path.makefile } elseif ($command -eq "sys.win.cleartext.vtext.show") { sys.win.cleartext.vtext.show } # 修正变量名$cs为$command,如果这两个预留命令不需要可以直接删除对应分支 elseif ($command -eq "start") { Write-Host "" } elseif($command -eq "command") { Write-Host "" } else { Write-Host "Unknown command." } }
内容的提问来源于stack exchange,提问作者user17512255
相关产品推荐
相关产品推荐

