批处理文件,循环不回应线

And*_*ong 3 for-loop cmd batch-file command-prompt

我这里有问题.首先,代码:

test.bat的内容:

@echo off
cls
for /F "delims=" %%a in ('dir /B /A-D ^| findstr /I ".txt$"') do (
set str=%%a
echo %str% >> list.tmp
pause
)

echo ------------------
for /F %%i in (list.tmp) do echo %%i
del list.tmp
echo ------------------
Run Code Online (Sandbox Code Playgroud)

在test.bat所在的同一目录中,有两个测试文件:1.txt和2.txt

当我运行test.bat时,我的输出是:

------------------
2.txt
2.txt
------------------
Run Code Online (Sandbox Code Playgroud)

如您所见,未列出1.txt.

添加3.txt时,输出为:

------------------
3.txt
3.txt
3.txt
------------------
Run Code Online (Sandbox Code Playgroud)

有人可以帮我吗?

谢谢,黄安德鲁

Jay*_*Jay 5

您需要使用延迟扩展功能,因为在FOR循环内,您正在读取变量,并且该变量也在该循环中被修改.

@echo off
setlocal enabledelayedexpansion
cls
for /F "delims=" %%a in ('dir /B /A-D ^| findstr /I ".txt$"') do (
  set str=%%a
  echo !str! >> list.tmp
  pause
)

echo ------------------
for /F %%i in (list.tmp) do echo %%i
del list.tmp
echo ------------------
Run Code Online (Sandbox Code Playgroud)