2017-01-15 6 views
0

に変数部分文字列を比較します。それは約50文字です(私の例では10です)。難し私はマップとして使用するために非常に長い文字列を持っている文字列

@ECHO OFF 
SET map=CGWGWBBBTB 
SET playerposition=1 
ので

playerpositionが3だった場合、私はこのコードの次の行からWを受信したいでしょう:私はまた、私はマップ文字列上の選手の位置を表す数値として使用したい文字列を持っている

%map:~%playerposition%,1% 

私がそのようなplayereposition変数を取得することはできませんようです。

+1

'マップ:!ディレイド拡張が有効、またはで〜%playerposition%、1' ' %%マップを呼び出す:〜%playerposition%、1 %%'なし。この管理は、[この回答](http://stackoverflow.com/questions/10166386/arrays-linked-lists-and-other-data-structures-in-cmd-exe-batch-script/10167990#10167990)で説明されています質問は同じではありません... – Aacini

+0

@Aaciniありがとう!これはとても役に立ちました!それがコメントのためのものだった場合、upvoteでしょうか... –

+0

リンクされた答えをupvoteするかもしれません... ** ';)' ** – Aacini

答えて

1
@ECHO OFF 
SETLOCAL 
@ECHO OFF 
SET map=CGWGWBBBTB 
SET playerposition=1 
CALL SET playereposition=%%map:~%playerposition%,1%% 
SET play 
SET playerposition=2 
CALL SET playereposition=%%map:~%playerposition%,1%% 
SET play 
SET playerposition=3 
CALL SET playereposition=%%map:~%playerposition%,1%% 
SET play 

また、サブルーチン使用できます。サブ-から-第三パラメータ長-4-パラメータの文字列秒を格納するために使用され

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を変数名の第1パラメータに-parameterを指定します。

endlocal&...は一時変数を破棄し、解析トリックを使用して値を%1に割り当てます。このアプローチを使用しても、ルーチンは、例えば、1をデフォルトする(変化に)省略4パラメーター可能にすることによって、「スマート」行うことを可能にすること

注意。

文字列内の位置カウントが0で始まり、1ではないことにも注意してください。 !

関連する問題