web-dev-qa-db-fra.com

Obtenir la sous-chaîne d'un jeton dans la boucle?

J'ai cette boucle for pour obtenir une liste de noms de répertoires:

for /d %%g in (%windir%\Assembly\gac_msil\*policy*A.D*) do (
echo %%g
)

Sortir:

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

Je veux obtenir les noms de dossiers en commençant par "Politique" mais echo %%g:~29 ne fonctionne pas. J'ai aussi essayé de set x=%%g puis echo %x:~29% Et toujours ne fonctionne pas.

Alors, comment puis-je obtenir une sous-chaîne de jeton dans for boucle?

28
Ray Cheng

Bien sûr que set x=%%g Et une extraction de sous-chaîne de x devrait fonctionner, mais sachez que si la sous-chaîne est prise à l'intérieur d'une boucle, il doit être fait avec! au lieu de% (expansion retardée):

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

D'autre part, si vous voulez savoir "Comment obtenir la dernière partie (nom et extension) d'un jeton dans la boucle", la réponse est la suivante: Utilisez les modificateurs ~ nom et ~ rallonges dans %% G PARAMETRE remplaçable:

for /d %%g in (%windir%\Assembly\gac_msil\*policy*A.D*) do (
echo %%~NXg
)
5
Aacini

Un simple

dir /B %windir%\Assembly\gac_msil\*policy*A.D*

devrait faire l'affaire. Si vous voulez en faire la boucle:

for /f %%g in ('dir /B %windir%\Assembly\gac_msil\*policy*A.D*') do (
    echo %%g
)
1
ChrisWue