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

PowerShell中Get-Content -Raw赋值变量在if语句对比异常如何解决?

问题原因

  • Get-Content添加-Raw参数读取文件时,会将整个文件的所有内容作为单个字符串返回,包含文件末尾隐含的换行符、空白字符,你以为$text的值是hub_33,实际它的值是hub_33\r\n(Windows换行格式)或者hub_33\n(Linux换行格式)
  • 管道中传递的$_是Get-Content逐行读取的结果,会自动去掉行尾的换行符,两个字符串实际内容不一致,所以-eq判断永远为假。
  • 原代码中"$text"的写法属于冗余操作,直接使用$text即可,不会影响功能但没有必要。

修复方案

最简单的修改方式是读取$text时直接去掉首尾的空白、换行符,或者如果out.txt本身只有一行内容,不用-Raw参数读取即可。

最终可用代码(推荐,兼容性最好)

# 读取后Trim掉所有首尾空白、换行符
$text = (Get-Content "E:\out.txt" -Raw).Trim()

Get-Content C:\inetpub\web_empower\App_Data\file.txt -Tail 30 -wait | % {
  $_
  if($_ -eq $text) {
    break
  }
}

备选方案(适合out.txt只有一行内容的场景)

# 不使用-Raw参数,直接取第一行内容,自动过滤行尾换行
$text = Get-Content "E:\out.txt" | Select-Object -First 1

Get-Content C:\inetpub\web_empower\App_Data\file.txt -Tail 30 -wait | % {
  $_
  if($_ -eq $text) {
    break
  }
}

额外排查点

如果修改后还是匹配失败,可以检查两个文件的编码是否一致,读取时指定相同的编码参数即可,示例:
$text = (Get-Content "E:\out.txt" -Raw -Encoding UTF8).Trim()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 23:15:04