3

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

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 ------------------

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

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

------------------
2.txt
2.txt
------------------

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

而当添加 3.txt 时,输出为:

------------------
3.txt
3.txt
3.txt
------------------

任何人都可以帮助我吗?

谢谢,安德鲁·王

4

2 回答 2

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 ------------------
于 2012-10-28T07:43:45.840 回答
3

你也可以使用一个函数(子程序)......这也“强制” CMD 评估每个循环......

@echo off
cls
for /F "delims=" %%a in ('dir /B /A-D ^| findstr /I ".txt$"') do (
  call :doOne %%a 
)

echo ------------------
for /F %%i in (list.tmp) do echo %%i
del list.tmp
echo ------------------
goto :EOF

:DoOne
  set str=%1
  echo %str% >> list.tmp
  pause
于 2012-10-28T08:33:36.237 回答