Подтвердить что ты не робот

Получение подстроки токена в цикле?

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

4b9b3361

Ответ 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!
)