0

set /p在这个 if 块内使用时。变量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设置为实际输入的值?

4

2 回答 2

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 (
        ...
 )
于 2013-09-05T20:34:00.133 回答
2

您需要使用延迟扩展。

在批处理语言中,在 FOR 或 IF 中,变量在命令执行之前而不是在命令执行期间“扩展”。(扩展=变量被其值替换)

例如下面的 IF 测试

IF condition (
foo
bar
)

被解释为if condition foo & bar

因此,如果设置了一个变量foo并且在 bar 中使用了相同的变量,则它是在中使用的变量的前一个值(进入循环之前的那个)bar

这有点令人不安,但是 Batch 的工作方式......所以set它工作正常,它只是一种特殊的工作方式。

您必须SETLOCAL ENABLEDELAYEDEXPANSION在代码的开头编写,并且应该延迟扩展的变量必须由!而不是包围%

所以echo %input%成为echo !input!

于 2013-09-05T19:09:13.367 回答