【发布时间】:2012-11-23 12:27:16
【问题描述】:
在测试脚本时,我在尝试使用批处理从字符串中提取字符时遇到了这个问题。我已将其简化为一个简单的示例。 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 的限制?
【问题讨论】:
标签: batch-file