跳过=!算!在Windows(7)批处理文件中不起作用

时间:2012-11-30 06:04:29

标签: batch-file

在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

任何人都可以帮我解决这个问题.....

3 个答案:

答案 0 :(得分: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选项。

答案 1 :(得分:1)

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

答案 2 :(得分: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