首页 > 解决方案 > 我们如何使用批处理脚本读取文件的第二行?

问题描述

我想检索包含几行文本的文件 (install.cfg) 的第二行。我尝试使用以下代码,该代码在我的本地机器上运行良好,但在 Windows 机器上执行时,它会抛出 'þ@' 无法识别为内部或外部命令、可运行程序或批处理文件

for /f "tokens=1*delims=:" %%G in ('findstr /n "^" install.cfg') do if ( %%G equ 2 SET VERSION=%%H )

标签: batch-file

解决方案


我建议在 ASCII/ANSI/OEM(每个字符一个字节)而不是 UnicodeUTF-8UTF-16,每个字符多个字节)编码的批处理文件中使用此代码:

for /F "usebackq skip=1 delims=" %%G in ("install.cfg") do set "VERSION=%%G" & goto HaveValue
:HaveValue
echo Version read from file: %VERSION%

Windows 命令处理器在命令行环境中默认使用的字符编码是在 CMD 窗口中运行命令(更改代码页)时输出的,chcp任何参数,并且取决于为所使用的设置的地区/国家/地区设置用户帐号。建议(通常但并非总是)使用与Windows 命令处理器在用于运行批处理文件的环境中默认使用的相同字符编码代码页编写批处理文件,尤其是在包含字符的批处理文件上代码值大于 U+007F(非 ASCII 字符)。

FOR期望文件install.cfg被编码为每个字符一个字节。只要版本字符串仅由 ASCII 字符组成,也可以不带或带字节顺序标记install.cfg的UTF-8 编码。在双击批处理文件时加载的默认命令行环境中,使用此代码的命令FOR无法直接处理UTF-16 编码。install.cfg

要了解所使用的命令及其工作原理,请打开命令提示符窗口,在其中执行以下命令,并仔细阅读每个命令显示的所有帮助页面。

  • echo /?
  • for /?
  • goto /?
  • set /?

推荐阅读