如何应用substring命令将XP cmd脚本中的百分比变量加倍?

rsk*_*k82 5 variables command-line windows-xp batch-file

以下是如何使用常规变量执行此操作的示例:

SET _test=123456789abcdef0
SET _result=%_test:~-7%
ECHO %_result%
:: that shows: abcdef0
Run Code Online (Sandbox Code Playgroud)

但是如果在开始时使用双百分比的变量(如%%A),那么for循环中需要这样的变量:

FOR /D %%d IN (c:\windows\*) DO (
  echo %%d
)
Run Code Online (Sandbox Code Playgroud)

这有效,但是:

FOR /D %%d IN (c:\windows\*) DO (
  echo %%d:~-7%
)
Run Code Online (Sandbox Code Playgroud)

只需复制:~-7到echo命令即可

jeb*_*jeb 7

replace和substring语法仅适用于不适用于参数的变量.

但您可以简单地将参数复制到变量中,然后使用子字符串语法.

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

这里需要延迟扩展,因为正常的%var%会在解析完整块时扩展,而不是在执行时扩展.

或者您可以使用call技术,但这非常慢并且有许多副作用.

FOR /D %%d IN (c:\windows\*) DO (
  set "var=%%d"
  call echo %%var:~-7%%
)
Run Code Online (Sandbox Code Playgroud)