Variables 如何在变量(%var1%var2%%)中获取变量
我试图获取用户输入的字符串,然后让文本滚动 到目前为止,我所拥有的:Variables 如何在变量(%var1%var2%%)中获取变量,variables,batch-file,set,Variables,Batch File,Set,我试图获取用户输入的字符串,然后让文本滚动 到目前为止,我所拥有的: @echo off setlocal set /p myString=String: cls call :StringLenght result myString :ECHO set /a result=%result%-1 set myString=%mystring:~%result%% echo %myString% ping -n 2 localhost>nul cls :StringLenght <r
@echo off
setlocal
set /p myString=String:
cls
call :StringLenght result myString
:ECHO
set /a result=%result%-1
set myString=%mystring:~%result%%
echo %myString%
ping -n 2 localhost>nul
cls
:StringLenght <resultVar> <stringVar>
(
setlocal EnableDelayedExpansion
set "s=!%~2!#"
set "len=0"
for %%P in (4096 2048 1024 512 256 128 64 32 16 8 4 2 1) do (
if "!s:~%%P,1!" NEQ "" (
set /a "len+=%%P"
set "s=!s:~%%P!"
)
)
)
(
endlocal
set "%~1=%len%"
goto ECHO
)
当我在变量%%中时,我无法从变量中提取字符串(听起来很奇怪,但我想你可以想象我的意思)。你需要延迟扩展才能工作 这是一个概念:
@echo off
setlocal EnableDelayedExpansion
set "mystring=mousetail"
set result=5
echo %mystring%
echo !mystring:~%result%!
应该很容易在代码中实现。您需要延迟扩展才能工作 这是一个概念:
@echo off
setlocal EnableDelayedExpansion
set "mystring=mousetail"
set result=5
echo %mystring%
echo !mystring:~%result%!
应该很容易在代码中实现。一种没有延迟扩展的替代方法是使用
调用命令,如下所示:
@echo off
set "myString=something"
set "result=4"
echo %myString%
call echo %%myString:~%result%%%
发生的情况是,Result
的扩展立即完成,但myString
的扩展被执行到由call
打开的新cmd
实例:
- 首先,将
echo
之后的%%
替换为单个%%
李>
- 其次,
%result%
被展开,即被其值4
替换李>
- 第三,最后一个
%%
被一个%%
替换李>
- 最后,将命令行
echo%myString:~4%
传递给call
打开的新cmd
实例,从而显示thing
李>
请注意,这仅在批处理文件中有效,而不直接在命令提示符(cmd
)中有效
如果两个嵌套变量都需要延迟展开,可以使用for
循环:
@echo off
set "myString=something"
set "result=4"
setlocal EnableDelayedExpansion
echo !myString!
for %%I in (!Result!) do echo !myString:~%%I!
endlocal
这是因为
变量%%I的在应用延迟扩展之前已展开,因此循环体将接收命令行echo!我的故事:~4
一种不延迟扩展的替代方法是使用调用
命令,如下所示:
@echo off
set "myString=something"
set "result=4"
echo %myString%
call echo %%myString:~%result%%%
发生的情况是,Result
的扩展立即完成,但myString
的扩展被执行到由call
打开的新cmd
实例:
- 首先,将
echo
之后的%%
替换为单个%%
李>
- 其次,
%result%
被展开,即被其值4
替换李>
- 第三,最后一个
%%
被一个%%
替换李>
- 最后,将命令行
echo%myString:~4%
传递给call
打开的新cmd
实例,从而显示thing
李>
请注意,这仅在批处理文件中有效,而不直接在命令提示符(cmd
)中有效
如果两个嵌套变量都需要延迟展开,可以使用for
循环:
@echo off
set "myString=something"
set "result=4"
setlocal EnableDelayedExpansion
echo !myString!
for %%I in (!Result!) do echo !myString:~%%I!
endlocal
这是因为
变量%%I的在应用延迟扩展之前已展开,因此循环体将接收命令行echo!我的故事:~4代码>所以我不需要“endlocal”?-感谢为我编写的代码:)endlocal
在批处理文件结束时隐式完成。您可以给它一个endlocal
,但实际上并不需要它。(除了在批处理文件期间必须打开和关闭它-有时,你必须这样做)。所以我不需要“endlocal”?-感谢为我编写的代码:)endlocal
在批处理文件结束时隐式完成。您可以给它一个endlocal
,但实际上并不需要它。(除非在批处理文件期间必须打开和关闭它-有时,您必须这样做)。