【问题标题】:Batch Files, For Loop Not Echoing Line批处理文件,for循环不回显行
【发布时间】:2012-10-28 07:11:25
【问题描述】:

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

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

谁能帮帮我吗?

谢谢, 安德鲁·黄

【问题讨论】:

    标签: for-loop batch-file cmd command-prompt


    【解决方案1】:

    您需要使用 延迟扩展 功能,因为在 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 ------------------
    

    【讨论】:

      【解决方案2】:

      您还可以使用函数(子程序)...这也“强制”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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-10-07
        • 2023-04-08
        • 2014-02-21
        • 1970-01-01
        • 1970-01-01
        • 2023-03-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多