在此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
设置为实际输入的值?
答案 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!