String 在for循环中获取令牌的子字符串?
我使用这个String 在for循环中获取令牌的子字符串?,string,batch-file,for-loop,token,String,Batch File,For Loop,Token,我使用这个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\Assem
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
不起作用。
我还试图设置x=%%g
,然后回显%x:~29%
,但仍然不起作用
那么,如何从
for
循环中的令牌中获取子字符串呢?当然设置x=%%g
和x的子字符串提取应该可以工作,但是请注意,如果子字符串是在for循环中获取的,则必须使用!而不是(延迟扩展):
简单的
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
)
另一方面,如果您想知道“如何在for循环中获取令牌的最后一部分(名称和扩展名)”,答案是:在%%g可替换参数中使用~name和~extension修饰符:
for /d %%g in (%windir%\Assembly\gac_msil\*policy*A.D*) do (
echo %%~NXg
)
我最近有一个类似的问题,我想在这里汇编3个有效的解决方案:
EnableDelayedExpansion
,就像在接受的答案中一样
@echo off
setlocal EnableDelayedExpansion
for /d %%g in (%windir%\Assembly\gac_msil\*) do (
set x=%%g
echo !x:~29!
)
for/f
处理dir
命令的输出
for /f "tokens=*" %%g in ('dir /ad /b %windir%\Assembly\gac_msil\*') do @echo %%g
for /d %%g in (%windir%\Assembly\gac_msil\*) do @echo %%~nxg
整洁的我将使用您的建议,但将标记为Aacini的作为答案,因为该解决方案使我了解了更多。您能详细介绍一下这实际上是如何工作的吗?我想做同样的事情,但我想要所有的文件名(不仅仅是“策略”文件名)。我尝试了
*
和\*.
,但它在空格处出现了中断,并给出了意外的结果。@LaggingReflection:所以你想要目录/B%windir%\Assembly\gac_msil\
-应该列出该目录中的所有文件吗?谢谢。我相信有一天它会派上用场的。你能详细介绍一下它是如何工作的吗?我想做同样的事情,但我想要所有的文件名(不仅仅是“策略”文件名)。我尝试了*
和\*.*
,但它在空格上出现了中断,并给出了意外的结果。@RayCheng哇,就如何在for循环中对变量进行子字符串迭代,搜索/试验了大约一个小时。然后你出现并继续“哦,顺便说一句,这是你如何用两个神奇的字母做到这一点”。这正是我想要的,谢谢你救了我一天:)这里有有用的提示,谢谢。帮助我编写了一个我认为不可能的脚本。@Aacini是否可以直接从参数%%g
中提取子字符串,而不使用辅助变量x
,也不启用延迟扩展?@alfredcapobianchi:简短回答:否。详细回答:如果仔细阅读问题,你应该注意这句话:“echo%%g:~29
不起作用”。你还救了我一天!setlocal EnableDelayedExpansion沿“!”的用法在for循环中起作用
for /d %%g in (%windir%\Assembly\gac_msil\*) do @echo %%~nxg