循环中的Echo和变量%延迟1个计数。 Echo没有错误

时间:2016-08-10 01:52:31

标签: loops cmd echo

我正在尝试制作一个CMD批处理脚本,它将执行以下操作。

  1. 阅读文本文件的第一行。文本文件的第一行包含日期。
  2. 如果日期是从当前日期开始的3个月,请删除该文本文件。
  3. 为了说明,  文件A的第一行是Hello1,文件B的第一行是Hello2

    我想得到一个输出显示这个 %counter %%文本文件的第一行%,

    所以我的例子看起来应该是这样的:

    2 Hello2 1 Hello1

    但相反,我得到了这个:

    2 1 Hello2

    我目前的代码是这样的。

    set file.1=A.txt
    set file.2=B.txt
    set counter=2
    
    SETLOCAL EnableDelayedExpansion
    set counter=%counter%
    
    :loop
    if %counter% NEQ 0 (
    set /p texte=<!file.%counter%!
    echo %counter% %texte%
    
    set /a counter=%counter%-1
    gotop loop)
    

    我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

您已使用setlocal命令设置延迟扩展(顺便说一句,该命令应该有相应的endlocal),但您似乎不是使用< / em>在所需的所有地方延迟扩张。

延迟扩展变量需要使用!进行扩展, %

当然,一旦你这样做,你就会发现像!file.!counter!!这样的表达式的问题,因为cmd.exe不是,错误,最伟大的工具在世界上: - )

然而,这个事实已经产生了世界上一些最狡猾的编码器,迫使他们解决这些限制,你可以按照call使用@setlocal enableextensions enabledelayedexpansion @echo off set file.1=A.txt set file.2=B.txt set counter=2 :loop if !counter! NEQ 0 ( call :sneaky_set fspec file.!counter! set /p texte=<!fspec! echo !counter! !texte! set /a counter=!counter!-1 goto loop ) endlocal goto :eof :sneaky_set set %1=!%2! goto :eof 进行双重间接变量以下程序:

call

fspec语句通过file.NN(第一级间接,countersneaky_set中的当前值)到{{ 1}}。它反过来执行:

set fspec=!file.N!

第二个级别的间接,因此将file设置为正确的*.txt值。