批量自修改脚本

时间:2014-02-02 23:33:13

标签: batch-file

我有一个批处理脚本,实质上是一个无限循环,在暂停> 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的回答,因为它似乎完美无缺。

3 个答案:

答案 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