在if块中批处理文件输入无法正常工作

时间:2013-09-05 19:05:13

标签: batch-file

在此if块中使用set /p时。变量input未设置为输入值。它仅在第二次调用脚本时设置(就好像它仅在echo %input%行之后设置)。

 if "%1"=="" (
        echo "You have to specify the name of the file."
        set /p input=File name: 
        echo %input%
        pause

 ) else (
        ...
 )

如何将变量input设置为实际输入的值?

2 个答案:

答案 0 :(得分:3)

这里你不需要delayed expansion。例如:

 if "%1"=="" (
        echo "You have to specify the name of the file."
        set /p input=File name: 
        call echo %%input%%
        pause

 ) else (
        ...
 )

答案 1 :(得分:2)

您需要使用延迟扩展。

在批处理语言中,在FOR或IF中,变量在命令执行之前“扩展”,而不是在命令执行期间。 (expanded =变量由其值重新计算)

例如,以下IF测试

IF condition (
foo
bar
)

被解释为if condition foo & bar

因此,如果在foo中设置了变量并且在bar中使用了相同的变量,那么它就是bar中使用的变量的先前值(进入循环之前的变量)。 / p>

这有点令人不安但批处理如何工作...... 所以set工作正常,这只是一种特殊的工作方式。

您必须在代码的开头写SETLOCAL ENABLEDELAYEDEXPANSION,并且应该延迟其扩展的变量必须用!代替%

因此echo %input%成为echo !input!