bat文件运行的“如果”让输入参数

问题描述:

在一个名为“mybat.bat” 文件将这个前检查(把它放在C:\ TEMP \ 不要把它放在C:\ WINDOWS)bat文件运行的“如果”让输入参数

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”命令。

无休止的故事... 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 
+0

感谢。这节省了一天(明天)。我绝对不是“蝙蝠侠”的人。帕杜转储。 (我每周都在这里)。 – granadaCoder 2015-04-05 23:43:26