繁体   English   中英

批处理中的for循环中的变量

[英]variable in a for loop inside a batch

我将需要一些帮助来了解我想在目录中循环查找哪些子目录以某些特定字符结尾的奇怪行为。 我写这个来测试:

@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,我也永远无法获得目录名称的结尾

可能有人对此有解释吗?

使用延迟扩展的行可以正常工作,但是输出中没有任何内容可以显示它。 您具有ECHO ON,但是在延迟扩展发生之前回显了该行,因此您看不到结果。 尝试添加如下行

echo V1=!V1!
echo V2=!V2!
etc.

在循环中查看延迟的扩展分配的结果。

当然,使用常规扩展的分配在循环中不起作用,这就是为什么发明了延迟扩展的原因。

您必须使用!var!变量!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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM