2010-06-14 65 views
2

我在我的Visual Studio工具链中使用了一个Windows批处理文件,该文件创建特定目录中的文件列表,然后使用“findstr”将此列表缩小为只包含名称包含特定字符串的文件;然后在这些文件上做一些工作。Windows批处理文件如何检测到文件大于0字节?

dir /b \mypath\*.wav >wavRawList.txt 

findstr /b /v "DesiredString" wavRawList.txt >wavListWithDesiredString.txt 

for /f %%a in (wavListWithDesiredString.txt) do (

    [... do some stuff ...] 

) 

Visual Studio中经常报道这批文件中的错误,我想这是因为wavListWithDesiredString.txt经常最终被以长度为0的文件是否有各种各样的“如果存在wavListWithDesiredString.txt”里而不是“存在”,我可以替代一个意思是“如果它存在,其文件长度大于0”的命令?

回答

5

的更多或更少的内联的方式,使用for

for %%x in (wavListWithDesiredString.txt) do if not %%~zx==0 (
    ... 
) 

,或者你可以使用一个子程序:

:size 
set SIZE=%~z1 
goto :eof 

,你可以这样调用:

call :size wavListWithDesiredString.txt 
if not %SIZE%==0 ... 
0

我能用another stack overflow question found here解决问题的文件大小部分。我会用嵌套模拟AND运算符如下面的例子:

IF EXIST %1 IF %~z1 GTR 0 ECHO Both conditions are satisfied. 

%1是必须传递到一个批处理文件中的参数。

0
IF EXIST %1 IF %~z1 GTR 0 ECHO Both conditions are satisfied. 

不行的,因为如果文件不存在此部分: “IF%〜Z1 GTR 0” 解析为 “IF GTR 0”,这是无效的命令和结果:

0 was unexpected at this time. 

延迟扩展也无济于事。修复使用:

if exist %1 (
    echo "Ouput file exists, checking size" 
    for %%x in (%1) do if not %%~zx==0 (
     echo "File exists, size is non zero" 
     ... DO SOMETHING ... 
    ) else (
     echo "Size is zero" 
    ) 
) else (
    echo "There is no file" 
) 
相关问题