当我测试脚本时,在尝试从批处理字符串中提取字符时遇到此问题。我把它简化成一个简单的例子。 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。
@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
对于什么办法?
我知道这会很简单,谢谢! –
即使这太复杂了 – jeb