Batch file 在DOS中如何使用以空格开头的字符串设置/P
我希望在DOS批处理中得到这种结果:Batch file 在DOS中如何使用以空格开头的字符串设置/P,batch-file,set,newline,Batch File,Set,Newline,我希望在DOS批处理中得到这种结果: ==> Please enter your filename, formatted as [user][PC_id] : 允许用户在“:”之后输入文件名 我尝试了很多组合,但我能用的最好的组合 ECHO --^> Please enter your filename, formatted as Set /P FILE=[user][PC_id] : (不显示“[”之前的空格)您对Vista/Win7中引入的功能有问题。 当使用set
==> Please enter your filename, formatted as
[user][PC_id] :
允许用户在“:”之后输入文件名
我尝试了很多组合,但我能用的最好的组合
ECHO --^> Please enter your filename, formatted as
Set /P FILE=[user][PC_id] :
(不显示“[”之前的空格)您对Vista/Win7中引入的功能有问题。
当使用
set/p
时,它会去除字符串前面的所有空白字符
但在你的情况下,这很容易,因为你想回应两条线
@echo off
setlocal EnableDelayedExpansion
set LF=^
set /p "file=--> Please enter your filename, formatted as!LF! [user][PC_id]"
jeb的解决方案在打印两行时效果很好。但是有一种通用的解决方案,当您只想打印带前导空格的单行时效果很好。您所需要的只是一个退格字符
@echo off
setlocal
:: Define BS to contain a backspace
for /f %%A in ('"prompt $H&for %%B in (1) do rem"') do set "BS=%%A"
::Only need %BS% if you know prompt starts at line beginning
Set /P "FILE=%BS% [user][PC_id] : "
::If prompt is not at line beginning then need an extra char before %BS%
<nul set /p "=Part1"
<nul set /p "=.%BS% Part2"
@echo关闭
setlocal
::定义BS以包含退格
对于/f%%A in(“'prompt$H&for%%B in(1)do rem””)请设置“BS=%%A”
::如果知道提示从行开始,则只需要%BS%
设置/P“文件=%BS%[user][PC\u id]:”
::如果提示符不在行首,则需要在%BS%之前添加一个额外字符
另一种变体:
exit | cmd /k prompt -$G Please enter your filename, formatted as$_$s$s$s[user][PC_id]$s
set /p FILE=
echo %FILE%
您不需要在帖子中添加签名-您的用户卡会自动添加。在DOS中?您是指Windows,对吗?实际上,我的问题之前只需要空格。我尝试了您的答案:不幸的是,屏幕上没有显示任何内容:-(你在'set LF=^'之后有两行空行吗?'set LF=^'和没有'set LF=^'没有区别,所以没有两行空行。我使用MS版本6.1.7601等等!!我误解了你的问题。你的问题在我的脚本上,我知道它与我的结果有关!!它在'set LF=^'之后有两行空行!!非常感谢!我还没有尝试过你的问题!!)我们的解决方案,但打印一个退格字符是我自己试图做的,但没有成功(我的许多“组合之一”);-)我可能有一天会对它感兴趣,所以,谢谢你的帮助!;)