Как применить команду подстроки к переменной двойного процента в сценариях XP cmd? - PullRequest
4 голосов
/ 26 ноября 2011

вот пример того, как вы делаете это с обычными переменными:

SET _test=123456789abcdef0
SET _result=%_test:~-7%
ECHO %_result%
:: that shows: abcdef0

Но что делать с переменными с двойным процентом в начале (например, %%A), переменные, подобные этой, необходимы дляциклы:

FOR /D %%d IN (c:\windows\*) DO (
  echo %%d
)

это работает, но:

FOR /D %%d IN (c:\windows\*) DO (
  echo %%d:~-7%
)

просто копирует :~-7 в команду echo

1 Ответ

6 голосов
/ 27 ноября 2011

Синтаксис замены и подстроки работает только для переменных, а не для параметров.

Но вы можете просто скопировать параметр в переменную и затем использовать синтаксис подстроки.

setlocal EnableDelayedExpansion
FOR /D %%d IN (c:\windows\*) DO (
  set "var=%%d"
  echo !var:~-7!
)

Вам необходимо отсроченное расширение, так как обычный% var% будет расширен при анализе всего блока, а не во время выполнения.

Или вы можете использовать технику call, но это очень медленно и имеет много побочных эффектов.

FOR /D %%d IN (c:\windows\*) DO (
  set "var=%%d"
  call echo %%var:~-7%%
)
...