我一直到我的批处理文件的末尾,到“测试”回声。然后剧本爆炸了。它从未进入“test1”声明。我不确定为什么会这样,因为条件命令几乎与上一个有效的命令相同。
这是我的代码。我已经注释掉了将编辑注册表的命令,以便您可以安全地运行此脚本。出现相同的行为。
@echo OFF
echo A "feature" in Windows 7 may cause problems for some programs in
echo certain conditions.
echo.
echo Basically, if you have a high resolution screen at install time, Win7 will
echo install a larger font set (125%) by default. If you then choose go back to the
echo standard font size (100%), Windows will keep some of the large fonts even
echo though everything else is adjusted for standard fonts, causing programs that
echo use these fonts to break because the text will not always fit inside the GUI.
echo.
echo.
for /f "tokens=4-5 delims=. " %%i in ('ver') do set VERSION=%%i.%%j
if "%version%" == "6.1" (
echo Verified Windows 7 system
echo.
) else (
echo This is not a Windows 7 system.
goto end
)
setlocal ENABLEEXTENSIONS
::variable used for validation logic
set fontsExist=true
:: Sets the Registry Key Name
set KEY_NAME="HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts"
:: Sets the Registry Sub Key Names
set COURIER_VALUE_NAME="Courier 10,12,15"
set MS_SANS_SERIF_VALUE_NAME="MS Sans Serif 8,10,12,14,18,24"
set MS_SERIF_VALUE_NAME="MS Serif 8,10,12,14,18,24"
:: Queries the registry for the Courier 10,12,15 font and saves the data
FOR /F "usebackq skip=2 tokens=1-6" %%A IN (`REG QUERY %KEY_NAME% /v %COURIER_VALUE_NAME% 2^>nul`) DO (
set COURIER_ValueName=%%A %%B
set COURIER_ValueType=%%C
set COURIER_ValueValue=%%D
)
if defined COURIER_ValueName (
@echo Courier 10,12,15 Value Name = %COURIER_ValueName%
@echo Courier 10,12,15 Value Type = %COURIER_ValueType%
@echo Courier 10,12,15 Value Value = %COURIER_ValueValue%
echo.
) else (
@echo %KEY_NAME%\%COURIER_VALUE_NAME% not found.
echo.
set fontsExist=false
)
FOR /F "usebackq skip=2 tokens=1-6" %%A IN (`REG QUERY %KEY_NAME% /v %MS_SANS_SERIF_VALUE_NAME% 2^>nul`) DO (
set MS_SANS_SERIF_ValueName=%%A %%B %%C %%D
set MS_SANS_SERIF_ValueType=%%E
set MS_SANS_SERIF_ValueValue=%%F
)
if defined MS_SANS_SERIF_ValueName (
@echo MS Sans Serif 8,10,12,14,18,24 Value Name = %MS_SANS_SERIF_ValueName%
@echo MS Sans Serif 8,10,12,14,18,24 Value Type = %MS_SANS_SERIF_ValueType%
@echo MS Sans Serif 8,10,12,14,18,24 Value Value = %MS_SANS_SERIF_ValueValue%
echo.
) else (
@echo %KEY_NAME%\%MS_SANS_SERIF_VALUE_NAME% not found.
echo.
set fontsExist=false
)
FOR /F "usebackq skip=2 tokens=1-5" %%A IN (`REG QUERY %KEY_NAME% /v %MS_SERIF_VALUE_NAME% 2^>nul`) DO (
set MS_SERIF_ValueName=%%A %%B %%C
set MS_SERIF_ValueType=%%D
set MS_SERIF_ValueValue=%%E
)
if defined MS_SERIF_ValueName (
@echo MS Serif 8,10,12,14,18,24 Value Name = %MS_SERIF_ValueName%
@echo MS Serif 8,10,12,14,18,24 Value Type = %MS_SERIF_ValueType%
@echo MS Serif 8,10,12,14,18,24 Value Value = %MS_SERIF_ValueValue%
echo.
) else (
@echo %KEY_NAME%\%MS_SERIF_VALUE_NAME% not found.
echo.
set fontsExist=false
)
if fontExists==false (
echo Not all fonts exist.
echo.
goto end
)
echo If you want to write to your registry then
pause
echo.
:courier_eval
::checks for correct values
if %COURIER_ValueValue%==COURF.FON (
echo Courier 10,12,15 registry key is correct.
goto san_eval
)
::checks for known incorrect values
if %COURIER_ValueValue%==COURE.FON (
echo COURIER font registry value is incorrect. Attempting to correct...
::REG ADD %KEY_NAME% /v %COURIER_VALUE_NAME% /t "%COURIER_ValueType%" /d "COURE.FON" /f
goto san_eval
)
:san_eval
::checks for correct values
if %MS_SANS_SERIF_ValueValue%==SSERIFF.FON (
echo MS Sans Serif 8,10,12,14,18,24 registry key is correct.
goto serif_eval
)
::checks for known incorrect values
if %MS_SANS_SERIF_ValueValue%==SSERIFE.FON (
echo MS SANS SERIF font registry value is incorrect. Attempting to correct...
::REG ADD %KEY_NAME% /v %MS_SANS_SERIF_VALUE_NAME% /t "%MS_SANS_SERIF_ValueType%" /d "SSERIFE.FON" /f
goto serif_eval
)
:serif_eval
::checks for correct values
if %MS_SERIF_ValueValue%==SERIFF.FON (
echo MS Serif 8,10,12,14,18,24 registry key is correct.
goto end
)
echo test
pause
::checks for known incorrect values
if %MS_SERIF_ValueValue%==SERIFE.FON (
echo MS SERIF font registry value is incorrect. Attempting to correct...
::REG ADD %KEY_NAME% /v %MS_SERIF_VALUE_NAME% /t "%MS_SERIF_ValueType%" /d "SERIFE.FON" /f
)
echo test1
pause
:end
pause
相关代码位于结尾附近的echo test
和echo test1
之间。
答案 0 :(得分:1)
问题是:: comment-style倾向于破坏代码块 - 改为使用rem。