在获取输入参数之前,bat文件正在运行“if”检查

时间:2015-04-03 20:59:52

标签: batch-file windows-7-x64

将此文件放入名为“mybat.bat”的文件中 (把它放在c:\ temp \ 不要把它放在c:\ windows)

set __rightFolder=.


del "%__rightFolder%\system.ini.copy"


If NOT exist "%__rightFolder%\system.ini.copy" (
    copy "%windir%\system.ini" "%__rightFolder%\system.ini.copy"
    ECHO "%__rightFolder%\system.ini.copy"
    SET /P AREYOUSURE="Do you want to run the dir command on '%__rightFolder%\system.ini.copy'"
    IF /I "%AREYOUSURE%" EQU "Y" (
        dir "%__rightFolder%\system.ini.copy"
    )
)


PAUSE

当我运行这个简单的脚本时,在输入任何内容之前,“IF / I”正在运行。 注意,我有一个很长的问题,引用了问题。

这可能很简单,但我是.bat skillzz臭。

这是我的输出。

C:\Temp>set __rightFolder=.

C:\Temp>del ".\system.ini.copy"
Could Not Find C:\Temp\system.ini.copy

C:\Temp>If NOT exist ".\system.ini.copy" (
copy "C:\Windows\system.ini" ".\system.ini.copy"
 ECHO ".\system.ini.copy"
 SET /P AREYOUSURE="Do you want to run the dir command on '.\system.ini.copy'"
 IF /I "" EQU "Y" (dir ".\system.ini.copy" )
)
        1 file(s) copied.
".\system.ini.copy"
Do you want to run the dir command on '".\system.ini.copy"'y

C:\Temp>PAUSE
Press any key to continue . . .

所以我输入'y',但它没有执行“dir”命令。

1 个答案:

答案 0 :(得分:1)

无尽的故事...... EnableDelayedExpansion

  

延迟扩展将导致变量在执行时扩展   时间而不是在解析时,这个选项打开了   SETLOCAL命令。当延迟扩展实际上是变量可能   使用!variable_name!引用(除了正常情况   %variable_name%

修补:

set __rightFolder=.
del "%__rightFolder%\system.ini.copy"
If NOT exist "%__rightFolder%\system.ini.copy" (
    copy "%windir%\system.ini" "%__rightFolder%\system.ini.copy"
    ECHO "%__rightFolder%\system.ini.copy"
    SET /P "AREYOUSURE=Do you want to run the dir command on '%__rightFolder%\system.ini.copy' "
    SETLOCAL enabledelayedexpansion
    IF /I "!AREYOUSURE!" EQU "Y" (
        dir "%__rightFolder%\system.ini.copy"
    )
    ENDLOCAL
)
PAUSE