Batch file 在if块中,批处理文件输入无法正常工作
在该if块内使用Batch file 在if块中,批处理文件输入无法正常工作,batch-file,Batch File,在该if块内使用set/p时。变量input未设置为输入值。它仅在第二次调用脚本时设置(好像它仅在echo%input%line之后设置) 如何将变量输入设置为实际输入的值?您需要使用延迟扩展 在批处理语言中,在FOR或IF中,变量在命令执行之前“展开”,而不是在命令执行期间展开。(展开=变量由其值重新放置) 例如,下面的IF测试 IF condition ( foo bar ) 如果条件foo&bar 因此,如果在foo中设置了一个变量,并且在bar中使用了相同的变量,则在bar中使用的是该
set/p
时。变量input
未设置为输入值。它仅在第二次调用脚本时设置(好像它仅在echo%input%
line之后设置)
如何将变量
输入设置为实际输入的值?您需要使用延迟扩展
在批处理语言中,在FOR或IF中,变量在命令执行之前“展开”,而不是在命令执行期间展开。(展开=变量由其值重新放置)
例如,下面的IF测试
IF condition (
foo
bar
)
如果条件foo&bar
因此,如果在foo
中设置了一个变量,并且在bar中使用了相同的变量,则在bar
中使用的是该变量的上一个值(进入循环之前的值)
这有点令人不安,但批处理的工作方式。。。
因此,设置是正确的,这只是一种特殊的工作方式
您必须在代码的开头写入SETLOCAL ENABLEDELAYEDEXPANSION
,并且应该延迟扩展的变量必须被包围代码>而不是%
所以echo%input%
变成echo!输入代码>您需要使用延迟扩展
在批处理语言中,在FOR或IF中,变量在命令执行之前“展开”,而不是在命令执行期间展开。(展开=变量由其值重新放置)
例如,下面的IF测试
IF condition (
foo
bar
)
如果条件foo&bar
因此,如果在foo
中设置了一个变量,并且在bar中使用了相同的变量,则在bar
中使用的是该变量的上一个值(进入循环之前的值)
这有点令人不安,但批处理的工作方式。。。
因此,设置是正确的,这只是一种特殊的工作方式
您必须在代码的开头写入SETLOCAL ENABLEDELAYEDEXPANSION
,并且应该延迟扩展的变量必须被包围代码>而不是%
所以echo%input%
变成echo!输入代码>此处不需要延迟扩展。例如:
if "%1"=="" (
echo "You have to specify the name of the file."
set /p input=File name:
call echo %%input%%
pause
) else (
...
)
这里不需要延迟扩展。例如:
if "%1"=="" (
echo "You have to specify the name of the file."
set /p input=File name:
call echo %%input%%
pause
) else (
...
)
没错,我同意朱利安的看法。如果启用延迟扩展,则SET/P将在for块内工作。@djangofan-实际上,SET/P无论如何都能工作。只有存储值的显示需要延迟扩展。如果条件foo&bar
应写入如果条件foo&bar
。正如最初使用&&
编写的那样,bar
仅在foo
成功时才会执行| |
是失败的条件运算符。简单的命令连接操作符是一个&
。没错,我同意Julien的观点。如果启用延迟扩展,则SET/P将在for块内工作。@djangofan-实际上,SET/P无论如何都能工作。只有存储值的显示需要延迟扩展。如果条件foo&bar
应写入如果条件foo&bar
。正如最初使用&&
编写的那样,bar
仅在foo
成功时才会执行| |
是失败的条件运算符。简单命令串联运算符是单个&
。