【发布时间】: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