CMD在批处理文件中跳过一行没有明显的原因,那是什么原因?

时间:2013-08-08 01:19:33

标签: windows batch-file

简单的脚本,可能是一个简单的问题:

set /p customsettings="Some input prompt: "
if /i %customsettings:~0,1% equ Y echo Some output

^ - 这很好......

set custom=1
if %custom% equ 1 (
    set /p customsettings="Some input prompt: "
    echo Some output
)

^ -...这很好用 那么为什么这不能正常工作?:

set custom=1
if %custom% equ 1 (
    set /p customsettings="Some input prompt: "
    if /i %customsettings:~0,1% equ Y echo Some output
)

仅当set /p customsettings行被夹在两个if语句之间时才会被跳过。

我很好奇为什么会这样,以及如何解决它。

注意:无论EnableDelayedExpansion的设置如何,问题仍然存在。

1 个答案:

答案 0 :(得分:2)

您可以在此网站上阅读很多有关延迟扩展的信息。整个IF / FOR构造(或parens中的多行)被加载并扩展为1行。所以你必须考虑LOAD-TIME行为和RUN-TIME行为。试试这个:

@echo off
setlocal enabledelayedexpansion
set custom=1
if %custom% equ 1 (
    set /p customsettings="Some input prompt: "
    if /i "!customsettings:~0,1!"=="Y" echo Some output
)