0

我一直在研究一个批处理脚本,它检查文件的大小并在大小大于 0 字节的情况下发送电子邮件:

set V_TMP_FILE="D:\pmserver\Tgtfiles\XLI_stage\f_cdc_flag1.out" 
set minbytesize=0  
if exist %V_TMP_FILE% (
FOR %%A IN ('%V_TMP_FILE%') DO set size=%%~zA
if %size% GTR %minbytesize% (
    %V_EMAIL_PATH%\postie -host:internalmail.usa.xl -to:"%V_TO_EMAIL_ID%" -from:%COMPUTERNAME%@xlgroup.com -s:"%V_SRC_TABLE_NM% %V_SUBJ%" -msg:"%V_MSG%" 
) else (
    echo %V_TMP_FILE% is EMPTY
)

我收到以下错误 -

标准输出和错误:

h file. 0 was unexpected at this time.

D:\Informatica91\server\bin>if  GTR 0 (

请帮我解决这个问题,这真的需要我花时间去挖掘这个问题。

4

2 回答 2

1

在执行之前,批处理会解析整个命令,即使它分布在多行中。作为该过程的一部分,它用任何 %var% 变量替换VAR它被解析时的值 - 即在它被执行之前。

SIZE在解析之前没有设置IF...,所以它的值被 (nothing) 替换,因此命令被解释为IF (nothing) GTR 0

此外,文件名周围的单引号会改变文件名,因为'它是一个有效的文件名字符。

治愈次数:似乎最简单

if exist %V_TMP_FILE% (
FOR %%A IN (%V_TMP_FILE%) DO (
if %%~zA GTR %minbytesize% (
    %V_EMAIL_PATH%\postie -host:internalmail.usa.xl -to:"%V_TO_EMAIL_ID%" -from:%COMPUTERNAME%@xlgroup.com -s:"%V_SRC_TABLE_NM% %V_SUBJ%" -msg:"%V_MSG%" 
) else (
    echo %V_TMP_FILE% is EMPTY
)
于 2013-03-18T09:39:15.140 回答
0

我们不得不回答这个问题多少次......

好的,请查看我可能在一周前写的这个答案。它解释了一切...

于 2013-03-18T09:39:21.427 回答