批处理脚本中 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 的默认值的主要内容,如果未能解决你的问题,请参考以下文章