【问题标题】:Error on line count step in batch批量行计数步骤错误
【发布时间】:2018-08-01 04:21:03
【问题描述】:

我使用下面的脚本来检查文件是否存在并且里面有行,需要运行特殊的过程。

CLS

setlocal EnableDelayedExpansion


REM Check the DataFile1.csv exist or not.
If not exist "E:\DataFolder\DataFile1.csv" (
PAUSE >NUL 
    exit /b
) else (
REM Check the DataFile2.csv exist or not.
        If not exist "E:\DataFolder\DataFile2.csv"  (
            exit /b
            )   else    (
REM Check the rows of DataFile1.csv
set file=E:\DataFolder\DataFile1.csv
set /a cnt1=0
for /f %%a in ('type "%file%"^|find "" /v /c') do set /a cnt1=%%a
echo %file% has %cnt1% lines
            IF %cnt1% LSS 2     (
                exit /b
            )   else (
REM Check the rows of DataFile2.csv
set file=E:\DataFolder\DataFile2.csv
set /a cnt2=0
for /f %%a in ('type "%file%"^|find "" /v /c') do set /a cnt2=%%a
echo %file% has %cnt2% lines 
                IF %cnt2% LSS 2     (
                    exit /b
                )   else (
REM Call D:\bin\To_do_something.bat
                )
            )
        )
)

但是当我尝试运行它时。如果会得到如下错误信息:

D:\Jobs>setlocal EnableDelayedExpansion

D:\Jobs>REM Check the DataFile1.csv exist or not.
2 was unexpected at this time.

D:\Jobs>                   IF  LSS 2       (

D:\Jobs>

在我注释掉行检查部分(只留下文件检查部分)后,它工作正常。

有什么想法吗?非常感谢!

【问题讨论】:

  • 添加引号.. IF "%cnt1%" LSS "2"IF "%cnt2%" LSS "2" 将消除错误并很好地显示您在 LSS 之前有空变量,因此告诉您需要 setlocal enabledelayedexpansion。够好笑的。您确实启用了它,但从不使用它。??
  • 谢谢格哈德,我添加了引号。现在可以了。但是计数行部分不起作用。变量 cnt1 和 cnt2 没有值。请你帮助我好吗?谢谢,
  • 您需要实际使用您设置的setlocal enabledelayedexpansion。作为提示,用 % 替换以 % 开头和结尾的变量!例如,if !cnt1! LSS 2 需要更多帮助,请从 cmdline 执行 setlocal/?。还要检查您的代码循环括号
  • 非常感谢 Gerhard,现在可以使用了:)
  • 让我知道我是否应该添加一个答案来反映给定的 cmets。

标签: batch-file rows


【解决方案1】:

典型的延迟扩展错误。你可以在这个论坛上阅读无数关于它的帖子。在这里查看我的答案 Batch file 'for' loops - multiple lines

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多