我一直在研究一个批处理脚本,它检查文件的大小,并在大小超过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 (
请帮助我解决这个问题,它真的花时间去挖掘这个问题。
答案 0 :(得分:1)
批处理在执行命令之前解析整个命令,即使它分布在多行中。作为该过程的一部分,它将任意%var%变量替换为值VAR
在PARSED时具有的值 - 即 BEFORE 它被执行。
SIZE
之前 IF...
NOT 设置,因此其值替换为(nothing),因此命令被解释为IF (nothing) GTR 0
< / p>
此外,文件名周围的单引号会更改文件名dince '
是一个有效的文件名字符。
治愈次数:最简单似乎是
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
)
答案 1 :(得分:0)
我们有多少次不得不回答这个......
好的,请查看我一周前写的this回答。它解释了 所有内容 ...