我需要一些帮助来理解一个奇怪的行为 我想遍历一个目录,找到哪些子目录以某些特定字符结尾。 我写这个来测试:
@ECHO.
setlocal EnableDelayedExpansion
set Dir=C:\test
for /f "tokens=*" %%I in ('dir %Dir% /ad /b') do (
set V1=%%I
set V2=!V1!
set V3=%V1%
set V4=%V1:~-4%
set V5=!V1:~-4!
)
endlocal
结果是:
C:>test
C:>setlocal EnableDelayedExpansion
C:>set Dir=C:\test
C:>for /F "tokens=*" %I in ('dir C:\test /ad /b') do (
set V1=%I
set V2=!V1!
set V3=
set V4=~-4
set V5=!V1:~-4!
)
C:>(
set V1=dir1_011
set V2=!V1!
set V3=
set V4=~-4
set V5=!V1:~-4!
)
C:>(
set V1=dir1_011 - Copie
set V2=!V1!
set V3=
set V4=~-4
set V5=!V1:~-4!
)
C:>(
set V1=dir1_011 - Copie (2)
set V2=!V1!
set V3=
set V4=~-4
set V5=!V1:~-4!
)
C:>(
set V1=dir1_011 - Copie (3)
set V2=!V1!
set V3=
set V4=~-4
set V5=!V1:~-4!
)
C:>(
set V1=dir1_011 - Copie (4)
set V2=!V1!
set V3=
set V4=~-4
set V5=!V1:~-4!
)
C:>(
set V1=dir1_011 - Copie (5)
set V2=!V1!
set V3=
set V4=~-4
set V5=!V1:~-4!
)
C:>(
set V1=dir1_011 - Copie (6)
set V2=!V1!
set V3=
set V4=~-4
set V5=!V1:~-4!
)
C:>(
set V1=dir1_011 - Copie (7)
set V2=!V1!
set V3=
set V4=~-4
set V5=!V1:~-4!
)
C:>(
set V1=dir1_011 - xxx
set V2=!V1!
set V3=
set V4=~-4
set V5=!V1:~-4!
)
C:>endlocal
C:>
即使我使用 EnableDelayedExpansion
,我也永远无法获得目录名称的结尾可能有人有一些解释吗?
答案 0 :(得分:2)
使用延迟扩展的线路正常工作,但输出中没有任何内容可以显示。您有ECHO ON,但在发生延迟扩展之前,该行会被回显,因此您无法看到结果。尝试添加
之类的行echo V1=!V1!
echo V2=!V2!
etc.
在你的循环中查看延迟扩展分配的结果。
当然,使用正常扩展的分配在循环中不起作用,这就是发明延迟扩展的原因。
答案 1 :(得分:1)
在循环内部和使用延迟扩展时,您必须使用!var!
而不是%var%
之类的变量。
测试一下:
@echo off
setlocal EnableDelayedExpansion
set Dir=C:\test
for /f "delims=" %%I in ('dir %Dir% /ad /b') do (
set V1=%%I
set V2=!V1!
echo !v2!
echo !v2:~-4!
)
endlocal
pause