首页 > 解决方案 > 批处理文件中的动态子字符串

问题描述

我的批处理文件的代码摘录:

set stringOne=ABCDEF    
echo %stringOne:~2,3%  

这个输出是CDE

如何动态echo输出起始索引和所需输出长度?

set stringOne=ABCDEF  
set start=2  
set len=3

标签: batch-filesubstringecho

解决方案


你需要两层变量扩展。这可以通过延迟扩展或通过call

@echo off
setlocal enabledelayedexpansion
set "string=ABCDEFGH"
set "start=2"
set "len=3"

echo A with delayed expansion: !string:~%start%,%len%!
call echo A with using 'call': %%string:~%start%,%len%%%

FOR /F %%G IN ('dir /b "%~f0"') DO ( 
  set /A "newStart=!Start!+2" 
  call echo B with 'call' and delayed : %%string:~!newStart!,!len!%%
  call call echo B with double-'call': %%%%string:~%%newStart%%,%len%%%%% 
)

FOR /F %%G IN ('dir /b "%~f0"') DO call :output
goto :eof
:output
  set /A "newStart=Start+2" 
  echo C with subroutine and delayed expansion: !string:~%newStart%,%len%! 
  call echo C with subroutine andusing 'call': %%string:~%newStart%,%len%%% 
goto :eof

编辑以匹配您的评论。您需要第三层扩展。我用一些不同的方法扩展了代码。
(顺便说一句:请不要在评论中发布代码,这几乎是不可能阅读的。如果您的问题发生了变化,最好下次再问一个后续问题)


推荐阅读