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

PowerShell写入TXT的IP无法被批处理读取 手动创建文件读取正常

问题原因
  • 编码不兼容是核心诱因:PowerShell 内置的 Out-File 命令默认输出编码为 UTF-16 LE(Unicode编码),而批处理的For /F读取命令默认仅支持ANSI、UTF-8无BOM编码的文本,无法正确解析UTF-16格式的内容,导致IP读取失败、变量k未被赋值,执行echo %k%时就会输出无参数的echo命令反馈ECHO is on.
  • 手动创建的TXT文件默认是ANSI编码,所以批处理可以正常读取。
解决方案

方案1:修改PowerShell写入编码(推荐,改后无需调整批处理代码)

只需要在原有PowerShell的Out-File命令后追加编码参数-Encoding Default即可,该参数指定输出编码为系统默认ANSI编码,和手动新建TXT的编码完全一致:

$Line = Invoke-RestMethod -Uri "http://ipinfo.io" | select-object -property ip
($Line  |  Select-String -Pattern "\d{1,3}(\.\d{1,3}){3}" -AllMatches).Matches.Value | Out-File -FilePath C:\src\Newfolder\currentip.txt -Encoding Default

也可以使用更简洁的写法,直接提取IP并写入:

(Invoke-RestMethod -Uri "http://ipinfo.io").ip | Set-Content -Path C:\src\Newfolder\currentip.txt

Set-Content默认编码就是ANSI,无需额外指定参数。

方案2:修改批处理代码适配现有编码

如果不想修改PowerShell代码,可以在批处理开头切换代码页为UTF-16 LE对应编码1200:

chcp 1200 >nul
For /F UseBackQ^ Delims^=^ EOL^= %%G In ("C:\src\Newfolder\currentip.txt") Do Set "k=%%G"
echo %k%
pause

注意:切换代码页为1200后,批处理后续的中文输出可能会出现乱码,仅推荐不需要输出中文的场景使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 15:24:03