3

解析しようとしている複雑な文字列があります。2 つの特定の文字のインデックスを微調整するための短いサブルーチンがあり、その間に文字列が必要です。問題は次のとおりです。別の変数の文字列操作内で変数を使用するにはどうすればよいですか?

サンプルコードは次のとおりです。

@ECHO off

set start=2
set end=5
set str=Hello World

echo %str:~2,5%
echo %str:~%start%,%end%%

最初のエコーが表示するものを 2 番目のエコーで表示するにはどうすればよいですか? (現在、2番目のエコーは私が望むものを示しているだけです。そのままクラッシュします)

4

2 に答える 2

3
@ECHO off

set start=2
set end=5
set str=Hello World

setlocal enableDelayedExpansion
echo %str:~2,5%
echo !str:~%start%,%end%!
endlocal

または(最悪の方法)

@ECHO off

set start=2
set end=5
set str=Hello World

echo %str:~2,5%
call echo %%str:~%start%,%end%%%

または (開始と終了の定義と部分文字列化がすべて括弧内にある場合に使用できます)

@ECHO off

set start=2
set end=5
set str=Hello World

echo %str:~2,5%
setlocal enableDelayedExpansion
for /f "tokens=1,2" %%a in ("%start% %end%") do echo !str:~%%a,%%b!
endlocal

または(これも悪い方法です)

@ECHO off

set start=2
set end=5
set str=Hello World

call :substr "%str%" %start% %end%
goto :eof

:substr
setlocal enableDelayedExpansion
set "_str=%~1"
echo !_str:~%2,%3!
rem without delayedExpansion
rem call echo %%_str:~%2,%3%%
endlocal
goto :eof
于 2013-10-28T21:00:57.410 に答える
0
CALL echo %%str:~%start%,%end%%%

あなたのバージョンの代わりに。必要ありませんenabledelayedexpansion

于 2013-10-28T22:33:07.333 に答える