Batch file 比较变量子字符串和字符串的困难

Batch file 比较变量子字符串和字符串的困难,batch-file,Batch File,我有一个很长的字符串用作地图。大约50个字符(不过我的例子是10个字符)。我还有一个字符串,我想用作表示球员在地图字符串上位置的数字: @ECHO OFF SET map=CGWGWBBBTB SET playerposition=1 因此,如果playerposition为3,我希望从下一行代码接收W: %map:~%playerposition%,1% 似乎我无法检索像那样的播放位置变量。@ECHO OFF SETLOCAL @回音 SET map=cgwgwbbtb 设置播放位置=1

我有一个很长的字符串用作地图。大约50个字符(不过我的例子是10个字符)。我还有一个字符串,我想用作表示球员在地图字符串上位置的数字:

@ECHO OFF
SET map=CGWGWBBBTB
SET playerposition=1
因此,如果
playerposition
为3,我希望从下一行代码接收
W

%map:~%playerposition%,1%
似乎我无法检索像那样的
播放位置
变量。

@ECHO OFF
SETLOCAL
@回音
SET map=cgwgwbbtb
设置播放位置=1
调用集playerposition=%%映射:~%playerposition%,1%
布景
设置播放位置=2
调用集playerposition=%%映射:~%playerposition%,1%
布景
设置播放位置=3
调用集playerposition=%%映射:~%playerposition%,1%
布景
您还可以使用一个子例程:

SET playerposition=4
CALL :setsubstr playereposition map %playerposition% 1
SET play

GOTO :EOF

:setsubstr
SETLOCAL ENABLEDELAYEDEXPANSION
SET "return=!%2:~%3,%4!"
endlocal&SET "%1=%return%"
GOTO :EOF
这里,临时变量
return
用于将字符串第二个参数的子字符串-from-3rd-parameter-length-4th-parameter-包含到变量名第一个参数中

endlocal&…
处理临时变量,并使用解析技巧将值分配给
%1

请注意,使用这种方法还允许例程变得“智能”,例如,允许(更改)省略的第4个参数默认为1


还要注意,在所有这些情况下,字符串中的位置计数从
0
开始,而不是从
1
开始!地图:~%playerposition%,1启用延迟扩展,或
呼叫,尽管问题不同…@Aacini谢谢!这很有帮助!如果这是评论的话,你会投赞成票……好吧,你可以投反对票<代码>;)