Получение подстроки токена для цикла? - PullRequest
25 голосов
/ 27 декабря 2011

У меня есть этот цикл 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?

Ответы [ 4 ]

38 голосов
/ 27 декабря 2011

Конечно, set x=%%g и извлечение x из подстроки должны работать, но имейте в виду, что если подстрока взята внутри цикла FOR , это должно быть сделано с! вместо% (задержка расширения):

setlocal EnableDelayedExpansion
for /d %%g in (%windir%\Assembly\gac_msil\*policy*A.D*) do (
set x=%%g
echo !x:~29!
)
4 голосов
/ 28 декабря 2011

С другой стороны, если вы хотите знать, «Как получить последнюю часть (имя и расширение) токена для цикла for», ответ: используйте модификаторы ~ Name и ~ eXtension в %% g заменяемые параметр:

for /d %%g in (%windir%\Assembly\gac_msil\*policy*A.D*) do (
echo %%~NXg
)
1 голос
/ 27 декабря 2011

Простой

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
)
0 голосов
/ 28 января 2016

Вы ДОЛЖНЫ использовать setlocal EnableDelayedExpansion и !variable! вместо %variable%, поэтому:

setlocal EnableDelayedExpansion

for /d %%g in (%windir%\Assembly\gac_msil\*policy*A.D*) do (
set x=%%g
echo !x:~29!
)
...