For loop 奇怪的是我的Bat文件中的In Do结果

For loop 奇怪的是我的Bat文件中的In Do结果,for-loop,batch-file,set,For Loop,Batch File,Set,我想知道为什么_STR没有设置为新的%%a?谢谢 FOR /f "tokens=1 delims=" %%A IN ('dir /b C:\test') DO ( ECHO %%A SET _STR=%%A ECHO TEST : %_STR% REM IF "%%A:~-1"=="/" ECHO %%A ) 我的输出看起来像这样 file1.txt 测试:folder3 file2.txt 测试:folder3 文件夹1 测试:folder3 文件夹2 测试:fo

我想知道为什么_STR没有设置为新的%%a?谢谢

FOR /f "tokens=1 delims=" %%A IN ('dir /b C:\test') DO (
    ECHO %%A
    SET _STR=%%A
    ECHO TEST : %_STR%
REM IF "%%A:~-1"=="/" ECHO %%A  
)
我的输出看起来像这样

file1.txt
测试:folder3
file2.txt
测试:folder3
文件夹1
测试:folder3
文件夹2
测试:folder3
文件夹3

测试:folder3将被设置为新的%%A,但不能以这种方式回显。
因为在括号块中,在执行开始之前,所有百分比变量都在解析时展开。
为了避免这种情况,您可以使用延迟扩展或调用技巧

Setlocal EnableDelayedExpansion
FOR /f "tokens=1 delims=" %%A IN ('dir /b C:\test') DO (
    ECHO %%A
    SET _STR=%%A
    ECHO TEST : !_STR!
    call ECHO TEST2 : %%_STR%%
)

_STR将被设置为新的%%A,但您不能以这种方式回显它。
因为在括号块中,在执行开始之前,所有百分比变量都在解析时展开。
为了避免这种情况,您可以使用延迟扩展或调用技巧

Setlocal EnableDelayedExpansion
FOR /f "tokens=1 delims=" %%A IN ('dir /b C:\test') DO (
    ECHO %%A
    SET _STR=%%A
    ECHO TEST : !_STR!
    call ECHO TEST2 : %%_STR%%
)

很好,这正是我需要知道的!很好,这正是我需要知道的!