2016-11-16 147 views
0

我有以下代码。我所试图做的是看看文件是否存在,如果它是不是具有一定规模更大,然后再继续:如果文件存在,并且小于

:: Create file dir variables 
set logfile=nightly_maint.log 
set logbackup=c:\sbbs\logBackups\ 
set announcefile=announce.txt 
set minbytesize=100 

:: Create date time string 
FOR /F "TOKENS=1* DELIMS= " %%A IN ('DATE/T') DO SET CDATE=%%B 
FOR /F "TOKENS=1,2 eol=/ DELIMS=/ " %%A IN ('DATE/T') DO SET mm=%%B 
FOR /F "TOKENS=1,2 DELIMS=/ eol=/" %%A IN ('echo %CDATE%') DO SET dd=%%B 
FOR /F "TOKENS=2,3 DELIMS=/ " %%A IN ('echo %CDATE%') DO SET yyyy=%%B 
SET dirname=%mm%-%dd%-%yyyy% 

cd c:\sbbs\ 
move %logfile% %logbackup%%logfile%.%dirname%.bak 

echo Nightly Maintenance running for Split Inifnity BBS on %dirname%. >> %logfile% 
echo Checking for daily received files list. >> %logfile% 
:: Create files received announcement 
cd c:\tinytic 
if exist %announcefile% (
    for /F "usebackq" %%A in ('%announcefile%') do set size=%%~zA 
     if %size% gtr %minbytesize% (
     echo New files received list found, proceeding with announcement generation. >> %logfile% 
     :: Add a text header and footer to my announcement 
     echo Creating message file for posting. >> %logfile% 
     copy header.txt+announce.txt+footer.txt final.txt 
     echo Creating new files announcement for FidoNet Allfix echo. >> %logfile% 
     c:\sbbs\exec\smbutil ic:\tinytic\final.txt c:\sbbs\data\subs\fidoallfixfi.shd < c:\tinytic\fidoreq.hdr 
     echo Creating new files announcement for Fidonet File Announce. >> %logfile% 
     c:\sbbs\exec\smbutil ic:\tinytic\final.txt c:\sbbs\data\subs\fidofdnannou.shd < c:\tinytic\fidoreq.hdr 
     echo Creating new files announcement for Fidonet File Announce. >> %logfile% 
     c:\sbbs\exec\smbutil ic:\tinytic\final.txt c:\sbbs\data\subs\fido-req.shd < c:\tinytic\fidoreq.hdr 
     echo Completed posting new files messages. >> %logfile% 
     echo Running ADDFILES for extended descriptions in file base. >> %logfile% 
     del announce.txt 
     del final.txt 
     cd c:\sbbs\ 
     c:\sbbs\exec\ADDFILES * /S /N /Z 
     echo Completed ALLFILES scan. >> %logfile% 
     echo Creating FREQ files list. >> %logfile% 
     c:\sbbs\exec\FILELIST * /ALL /ULD /EXT c:\taurus\files.txt 
    ) else (
     echo Announce.txt was zero bytes in size, bypassing new files received posting. >> %logfile% 
    ) 
) else (
    echo Announce.txt file not found, bypassing new files received posting. >> %logfile% 
) 

当运行批处理文件,在目录中的零字节文件,我得到这样的:

c:\sbbs>move nightly_maint.log c:\sbbs\logBackups\nightly_maint.log.11-16-2016.bak 
     1 file(s) moved. 

c:\sbbs>echo Nightly Maintenance running for Split Inifnity BBS on 11-16-2016. 1>>nightly_maint.log 

c:\sbbs>echo Checking for daily received files list. 1>>nightly_maint.log 

c:\sbbs>cd c:\tinytic 
100 was unexpected at this time. 

c:\tinytic>  if gtr 100 (

c:\sbbs> 
+0

阅读关于延迟扩展,变量集内部(代码块)需要特殊处理,可以是'setlocal EnableDelayedExpansion'并使用'!size!'或者做一个伪调用加倍的百分号'调用if%%size %% ..' – LotPings

+1

解决方法是[延迟扩展](http://ss64.com/nt/delayedexpansion.html),因为您正在更改*和*读取相同的变量在相同的代码块中:'if%size%gtr%minbytesize%' - >'if!size! gtr%minbytesize%'和'setlocal EnableDelayedExpansion'在脚本的顶部... – aschipfl

+2

@LotPings,恐怕'call'不会和'if'一起工作,因为命令解释器识别出'if'令牌早于'call'; ''''''''''''和'rem'对于'cmd'而言是特殊的,与所有其他命令标记相比... – aschipfl

回答

0

溶液延迟膨胀你正在发生变化,在相同的代码块读取相同变量:如果%尺寸%GTR%minbytesize% - >如果尺寸! gtr%minbytesize%和setlocal EnableDelayedExpansion在你的脚本之上。

相关问题