2

在 for 循环中,我检查了条件,如果条件为真,我设置了计数值并跳过了文件中的一些行,

           @echo off
           SetLocal EnableDelayedExpansion
           set /a count=0
           set for_parameters="skip=!count! delims="
           for /f %for_parameters% %%a in ('list.txt') do (
               echo %%a
               if %%a==Exception: (
                   set /a count+=2
               )
           )
           Endlocal

  Its shows delims=" was unexpected at this time. Error

谁能帮我解决这个问题.....

4

3 回答 3

4

jeb 关于延迟扩展和 FOR 选项的说法是正确的——你不能使用它——但这与代码中的问题无关。

在 FOR 语句中使用表达式之前,您正在使用延迟扩展,所以那里没有问题。

您的问题是您试图设置 SKIP=0。SKIP 值必须大于 0 才有效。修复很简单:如果您不想跳过任何行,请不要包含 SKIP 选项 :-)

@echo off
SetLocal EnableDelayedExpansion
set /a count=0
set "skip="
if !count! gtr 0 set "skip=skip=!count!"
set for_parameters="!skip! delims="
for /f %for_parameters% %%a in ('list.txt') do (
    echo %%a
    if %%a==Exception: (
        set /a count+=2
    )
)
Endlocal

扩展 jeb 的观点:您不能执行以下操作

for /f !for_parameters! %%a in ...

因为 FOR 有特殊的解析规则。大多数命令在延迟扩展后解析它们的选项。但是 FOR 和 IF 在 FOR 变量扩展和延迟扩展发生之前解析它们的选项。FOR 变量和延迟扩展都不能用于指定 FOR 或 IF 选项。

于 2012-11-30T13:03:11.610 回答
1

您可以使用更多命令来跳过行。

@echo off

:: By Elektro H@cker

SetLocal EnableDelayedExpansion

set /a count=2

for /F %%a in ('Type "list.txt" ^| MORE +!COUNT!') do (echo %%a)

Pause&exit
于 2012-11-30T09:37:02.000 回答
1

在 for-options 中只能使用百分比扩展,不能使用延迟扩展。
如果您的跳过值本身是在一个块中计算的,那么您需要将 for 循环提取到一个函数中

于 2012-11-30T06:30:12.193 回答