我有一个批处理脚本,实质上是一个无限循环,在暂停> nul后重置。但是,我需要一种方法将每个set / p替换为一个集合,以便在仍然显示上一个循环中给出的输入时删除提示。我可以在这个脚本中实现一些东西来自编辑所有的set / p来设置吗?
@echo off
title
setlocal enabledelayedexpansion
:a
cls
set /p a=Hello, world
echo %a%
pause>nul
goto a
第一个循环后我想要的输出是:
@echo off
title
setlocal enabledelayedexpansion
:a
cls
set a=Hello, world
echo %a%
echo %a%
pause>nul
goto a
有人可以向我解释Aacini的回答,因为它似乎完美无缺。
答案 0 :(得分:2)
这解决了您set /p ...
之前替换每个 set ...
命令的原始请求:
@echo off
title
setlocal enabledelayedexpansion
set pSwitch=/p
:a
cls
set %pSwitch% a=Hello, world
echo %a%
pause>nul
set "pSwitch="
goto a
只需在要更改的所有命令中使用set %pSwitch% ...
格式。
编辑:回复评论
在您的示例中,您通过set /p var=Prompt
更改了set var=Prompt
命令,也就是说,在第一个循环之后,您将提示分配给变量!在阅读完最后一条评论后,我意识到你要“存储用户永久输入的变量”。你可以这样做:
call :initVars
。set /p var=Prompt
更改每个call :mySet var="Prompt"
命令。
:mySet var="Prompt"
if not defined %1 (
set /P "%1=%~2"
echo set "%1=!%1!" >> "%~F0"
)
exit /B
:initVars
例如:
@echo off
title
setlocal enabledelayedexpansion
call :initVars
:a
cls
call :mySet a="Hello, world"
echo %a%
pause>nul
goto a
:mySet var="Prompt"
if not defined %1 (
set /P "%1=%~2"
echo set "%1=!%1!" >> "%~F0"
)
exit /B
:initVars
答案 1 :(得分:1)
idk你尝试了什么,或者你的脚本是什么样的,但尝试这样的事情。
set p=/p var=prompt
:a
set %p%
pause>nul
set p=var=prompt
goto a
如果这没有帮助,请进一步描述您的问题。
ps,现在不在windows comp,所以不能测试它。
答案 2 :(得分:1)
这将首次询问值,并在循环中的所有其他运行中使用“Hello,world”(这是您的示例所示):
@echo off
set "a="
:a
if not defined a ( set /p "a=Hello, world:" ) else ( set a=Hello, world )
echo %a%
pause>nul
goto :a
这就是你想要的我认为:第一次要求一个值,并在所有其他运行中使用这个值:
@echo off
set "a="
:a
if not defined a (set /p "a=Hello, world:") else (echo %a%)
pause>nul
goto :a