ディレクトリ名のリストを取得するために、この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
ループでトークンから部分文字列を取得するにはどうすればよいですか?
もちろん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!
)
一方、「forループでトークンの最後の部分(名前と拡張子)を取得する方法」を知りたい場合の答えは、%% g交換可能パラメーターで〜Nameおよび〜eXtension修飾子を使用します。
for /d %%g in (%windir%\Assembly\gac_msil\*policy*A.D*) do (
echo %%~NXg
)
シンプルな
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
)