Batch file 如何在批处理文件中使用%%inside%%?我知道';It’有点困惑,点击进入
我知道这个问题有点让人困惑。 这是我的剧本。(简易版) 我已经设置了这些变量Batch file 如何在批处理文件中使用%%inside%%?我知道';It’有点困惑,点击进入,batch-file,command-line,command-prompt,Batch File,Command Line,Command Prompt,我知道这个问题有点让人困惑。 这是我的剧本。(简易版) 我已经设置了这些变量 p1 = 1 p2 = 0 p3 = 1 而且还继续下去。 我想显示所有这些P值的列表。那么, 我设置了一个变量“I” 但后来我意识到%p%I%%不起作用了。。。 它不会转到%p1%并显示“1”, 它只显示了%p1%。在我的完整剧本中,它向我展示了一些疯狂的东西。。。有人能帮我吗??非常感谢 两个简单的方法。 第一种是使用延迟扩展。 首先用%i%展开i,然后再展开表达式!p1 或者使用CALL再次解析一行。 第一次解
p1 = 1
p2 = 0
p3 = 1
而且还继续下去。
我想显示所有这些P值的列表。那么,
我设置了一个变量“I”
但后来我意识到%p%I%%不起作用了。。。
它不会转到%p1%并显示“1”,
它只显示了%p1%。在我的完整剧本中,它向我展示了一些疯狂的东西。。。有人能帮我吗??非常感谢 两个简单的方法。
第一种是使用延迟扩展。
首先用%i%
展开i,然后再展开表达式!p1代码>
或者使用CALL
再次解析一行。
第一次解析后的行调用echo P%i%%=%%P%i%%
如下所示
呼叫回显P1=%P1%
第二次解析将%p1%
扩展到内容
setlocal EnableDelayedExpansion
set p1=1
set p2=0
set p3=1
set /a i = 0
:loop
set /a i = %i% + 1
echo P%i% = !p%i%!
call echo P%i% = %%p%i%%%
if %i% == 3 exit /b
goto loop
或者使用for循环的其他解决方案
for /L %%i in (1 1 3) do (
echo P%%i = !p%%i!
)
除了不使用延迟扩展的解决方案之外,我还提供了两种解决方案:
@echo off
setlocal EnableExtensions DisableDelayedExpansion
set "MyP1=1"
set "MyP2=0"
set "MyP3=5"
set "Count=0"
for /F "tokens=1* delims==" %%I in ('set MyP 2^>nul') do echo Variable %%I has value %%J & set /A Count+=1
echo Variables count is: %Count%
echo/
set "Index=1"
:Loop
if not defined MyP%Index% goto ExitLoop
set /A Value=MyP%Index%
echo Variable MyP%Index% has value %Value%
set /A Index+=1
goto Loop
:ExitLoop
set /A Index-=1
echo Variables count is: %Count%
endlocal
echo/
pause
数字不确定的环境变量以字符串MyP
开头。第一种方法在后台的一个单独的命令过程中运行set MyP
,该过程输出以MyP
开头的所有环境变量,其值按字母顺序排序,即输出用于此批次代码:
MyP1=1
MyP2=0
MyP3=5
该输出是为逐行处理的,它将每一行分成两个子字符串,因为
delims==,第一个子字符串是分配给循环变量I
的环境变量的名称,以及分配给下一个循环变量J
由于tokens=1*
,因此根据该值是环境变量的值
环境变量的名称及其值是通过计算以MyP
开头的变量数量来输出的,该变量也是在FOR循环之后输出的
对于第一个解决方案,环境变量的数量不得连续增加
第二种解决方案使用一个不带的循环。此循环要求环境变量的名称中有一个递增的数字。如果名称中没有更多具有当前索引号的环境变量,则循环将退出
使用算术表达式将当前环境变量的值分配给环境变量value
,因为在这种情况下,算术表达式中类似MyP1
的字符串被解释为环境变量的名称,其值应转换为整数以计算表达式。算术表达式的整数结果将转换回字符串,并分配给环境变量,使其保持等号
关于的答案可能有助于理解此处使用的环境变量使用技术
要了解所使用的命令及其工作方式,请打开命令提示符窗口,在其中执行以下命令,并非常仔细地阅读为每个命令显示的所有帮助页面
echo/?
endlocal/?
获取/?
goto/?
如果/?
暂停/?
setlocal/?
另请参见
和运算符在命令行上使用的说明,以避免使用命令块。使用powershell并使您的生活更轻松?您是如何设置变量的set p1=1
无法按预期工作,也无法创建名为%p1%
的变量我很想尝试powershell,但我不知道如何在其中编写脚本。。也许我会试试someday@LưuVĩnhPhúc但听起来很不寻常,set/a p1=1
不会包含空格。不,我只需要一个名为“p1”的变量。这个“call”功能很好,但很抱歉我不理解“!p1!”。我知道如何表示“call echo”,但我还需要将这个变量与另一个变量进行比较。比如“IF%p%I%%eq 0”
MyP1=1
MyP2=0
MyP3=5