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
相关产品推荐
相关产品推荐

