当我测试脚本时,我在尝试使用批处理从字符串中提取字符时遇到了这个问题。我已将其简化为一个简单的示例。t.txt
只包含这个词hello
。
@echo off
setlocal enabledelayedexpansion
set a=0
set b=1
for /f %%a in (t.txt) do (
set x=%%a
echo !x:~!a!,!b!!
set /a x+=1
)
pause >nul
问题是,需要使用延迟扩展来访问变量x
,并且因为我正在通过循环更新这些值,a
所以b
也需要使用延迟扩展来访问这些值。
尝试使用变量a
并b
拆分字符串时,它们都需要延迟扩展,但是!
标记的顺序意味着它没有按照我的意图进行解析!
CMD 会将我的命令扩展为!x:~!
,!,!
和!!
,而不是先扩展内部命令。显然我也不能使用%
's 。
我发现解决这个问题的唯一方法是调用不在循环中的外部函数,所以我可以使用%
's.
@echo off
setlocal enabledelayedexpansion
set a=0
set b=1
set v=
for /f %%a in (t.txt) do (
set x=%%a
call :RETURN x
set /a x+=1
)
pause >nul
:RETURN
set v=%1
echo %v:~!a!,!b!%
有什么方法可以让 cmd 以我需要的方式解析我的命令,或者这只是我必须使用的限制call
?