Получение подстроки токена в цикле?
У меня есть этот цикл for
, чтобы получить список имен каталогов:
for /d %%g in (%windir%\Assembly\gac_msil\*policy*A.D*) do (
echo %%g
)
Вывод:
C:\WINDOWS\Assembly\gac_msil\policy.5.0.A.D
C:\WINDOWS\Assembly\gac_msil\policy.5.0.A.D.O
C:\WINDOWS\Assembly\gac_msil\policy.5.20.A.D.O
C:\WINDOWS\Assembly\gac_msil\policy.5.25.A.D.O
C:\WINDOWS\Assembly\gac_msil\policy.5.35.A.D.O
C:\WINDOWS\Assembly\gac_msil\policy.5.55.A.D.O
C:\WINDOWS\Assembly\gac_msil\policy.5.60.A.D.O
C:\WINDOWS\Assembly\gac_msil\policy.5.70.A.D.O
C:\WINDOWS\Assembly\gac_msil\policy.6.0.A.D.O
Я хочу получить имена папок, начинающиеся с "policy", но echo %%g:~29
не работает.
Я также попытался set x=%%g
, а затем echo %x:~29%
и до сих пор не работает.
Итак, как мне получить подстроку из токена в цикле for
?
Ответы
Ответ 1
Конечно, set x=%%g
и извлечение подстроки x должно работать, но имейте в виду, что если подстрока взята внутри цикла FOR, это должно быть выполнено с помощью! вместо% (Delayed Expansion):
setlocal EnableDelayedExpansion
for /d %%g in (%windir%\Assembly\gac_msil\*policy*A.D*) do (
set x=%%g
echo !x:~29!
)
Ответ 2
С другой стороны, если вы хотите знать "Как получить последнюю часть (имя и расширение) токена в цикле цикла", ответ таков: используйте модификаторы ~ Name и ~ eXtension в %% g replaceable параметр:
for /d %%g in (%windir%\Assembly\gac_msil\*policy*A.D*) do (
echo %%~NXg
)
Ответ 3
Простой
dir /B %windir%\Assembly\gac_msil\*policy*A.D*
должен сделать трюк. Если вы хотите перебрать его:
for /f %%g in ('dir /B %windir%\Assembly\gac_msil\*policy*A.D*') do (
echo %%g
)
Ответ 4
Вы ДОЛЖНЫ использовать setlocal EnableDelayedExpansion
и !variable!
вместо %variable%
, поэтому:
setlocal EnableDelayedExpansion
for /d %%g in (%windir%\Assembly\gac_msil\*policy*A.D*) do (
set x=%%g
echo !x:~29!
)