批处理脚本中 Set /p 的默认值

Posted

技术标签:

【中文标题】批处理脚本中 Set /p 的默认值【英文标题】:default value of Set /p in batch script 【发布时间】:2018-02-07 02:39:07 【问题描述】:

有没有办法在 Windows 批处理脚本的 set /p 语句中显示默认值?

例如,像这样的:

set /p MyVar=My Default Value
echo $MyVar$

如果用户按下 Enter 而不输入任何其他内容,则 `MyVar 获取该默认值。

谢谢。

【问题讨论】:

这个问题之前已经回答过好几次了,比如this,或者this,或者this,... @Aacini 是的,可能是...有趣的是,我确实总是在任何搜索结果的顶部位置找到那些重复项。 :) 但是感谢您的第一个链接,我找到了我真正想要的东西,即不仅设置了默认值,而且还为用户预设了该默认值。 【参考方案1】:

这个:

SET /P "MyVar=" || SET "MyVar=My Default Value"

(Read more).


你也可以这样用:

SET /P "MyVar="
IF NOT DEFINED MyVar SET "MyVar=My Default Value"

【讨论】:

您也可以预设该值,因为set 不会在用户按回车而不输入的情况下覆盖它,例如set "MyVar=Default Value" & set /p "MyVar=Enter value: ". @eryksun 如果用户在不输入SET "MyVar=My Default Value" 的情况下按下回车键(在Windows 10 上测试)。 @eryksun 太晚了...修好了,谢谢。怎么会更可靠呢? 如果用户输入带双引号的字符串,则可能存在引号不匹配的解析问题。【参考方案2】:

这是一种方法。

如果定义了%1,它会将myvar设置为myvar,然后跳过提示并回显myvar,否则它将Default Value存储为默认值,但如果有人输入另一个值,它将覆盖默认值。不是你也可以使用%2%3等。

@echo off
set "myvar=%1"
if "%myvar%"=="" set /p "myvar=Enter Value: " || set "myvar=Default Value"
echo %myvar%

要查看结果,保存批处理并从cmdline 运行以下命令:

batchfile.cmd Default

这将跳过提示并回显:

默认

batchfile.cmd

这将提示Enter Value:,只需按回车键,然后会回显:

默认值

最后

batchfile.cmd

并输入一个值,该值将 lecho 输入的值。

【讨论】:

【参考方案3】:

上面提出的解决方案对我不起作用,或者它们的工作方式非常笨拙。

这是我应用的问题的(一个明显的)简单解决方案:

SET Docdir=D:\Documents\
SET /p Docdir="Target directory (Press Enter to keep <%Docdir%>): "

它会导致以下提示:

Target directory (Press Enter to use <D:\Documents\>):

然后用户查看默认值是什么,并可以使用Enter 键接受它

【讨论】:

以上是关于批处理脚本中 Set /p 的默认值的主要内容,如果未能解决你的问题,请参考以下文章

Bat批处理脚本

如何在变量批处理脚本中处理空间

批处理脚本登录sqlplus参数

使用Powershell脚本启动的批处理文件设置环境变量

windows监视HTTP连接数的批处理脚本

批处理脚本,用于复制FTP文件夹中的所有文件