为什么我收到"ECHO is on"而不是变量值?



我有下面的批处理脚本,但我得到的不是变量值"ECHO开启;打印。你能帮忙吗?我不知道这是否有任何影响,但需要注意的是,test.bat给出了当前的CPU温度,例如3200

SET RESULT
FOR /F %%a in ('test.bat') do SET RESULT=%%a
ECHO %RESULT%

编辑:现在我明白了结果变量是空的,但不明白为什么?我单独执行了以下命令,它返回温度:wmic /namespace:\rootwmi PATH MSAcpi_ThermalZoneTemperature get CurrentTemperature

这里的问题主要不是CRCRLF的丑陋的wmic行结尾,而是结尾处的空行(for不认为它是空的,因为它包含多余的CR(。只需过滤test.bat的非空行输出即可。另外,连接到findstr的管道也为您提供了一个合适的Windows行结尾。

FOR /F %%a in ('test.bat^|findstr "."') do SET RESULT=%%a
ECHO %RESULT%

注意:使用此方法,您只能获得最后一行(以前是空行,现在是最后一行非空行(。您使用的wmic命令为我的系统提供了两个温度(其中只有最后一个由变量保持(。你可能想考虑一下。

以下是我要做的:

问题是:的输出

wmic /namespace:\rootwmi PATH MSAcpi_ThermalZoneTemperature get CurrentTemperature

结果在末尾出现一个空行,该空行将用实际温度替代set命令。为了解决这个问题,将输出定向到文件,然后用于设置值。即使输出文件包含空行,SET也只读取任何文件的第一行。

控制台

IF EXIST "var_$CPU_TEMPERATURE.txt" del /q "var_$CPU_TEMPERATURE.txt"
for /F "skip=1 tokens=1 delims=" %P IN ('wmic /namespace:\rootwmi PATH MSAcpi_ThermalZoneTemperature get CurrentTemperature') DO (echo %P>> var_$CPU_TEMPERATURE.txt) && (SET /P $CPU_TEMPERATURE= <var_$CPU_TEMPERATURE.txt)
echo %$CPU_TEMPERATURE%

脚本

IF EXIST "var_$CPU_TEMPERATURE.txt" del /q "var_$CPU_TEMPERATURE.txt"
for /F "skip=1 tokens=1 delims=" %%P IN ('wmic /namespace:\rootwmi PATH MSAcpi_ThermalZoneTemperature get CurrentTemperature') DO (echo %%P>> var_$CPU_TEMPERATURE.txt) && (SET /P $CPU_TEMPERATURE= <var_$CPU_TEMPERATURE.txt)
%echo $CPU_TEMPERATURE%

最新更新