BATCH:正确解释用户通过 set /p 传递的环境变量

BATCH:正确解释用户通过 set /p 传递的环境变量

我想在我的脚本中支持用户输入的变量理解。

>set target=%programdata%
>echo %target%

给我:

C:\ProgramData

然而一切都很好……

>set /p target=
>%programdata%
>echo %target%

给我:

%programdata%

答案1

经过足够长时间的敲击键盘后,我找到了一个适合我的解决方案,用来call重新评估输入:

>set /p target=
>%programdata%
>call set "target=%target%"
>echo %target%

为我提供了期望的结果:

C:\ProgramData

答案2

要在批处理脚本中继续命令行,可以在行尾使用转义字符,如下所示:

set /p target=^
%programdata%
echo %target%

解释一下这个表述和我的表述之间的区别:

我的公式使第二行成为第一行的延续,以便两者都由 DOS 解释器进行批处理,它还执行变量的扩展。

您的公式允许set /p读取数据并将其存储到变量中。这不会经过 DOS 解释器,因此变量不会扩展,因此值保持读取时的状态。

您的答案中的方法的作用是强制输入的字符串通过 DOS 解释器,因此变量被扩展,

相关内容