2016-11-16 138 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在你的腳本之上。

相關問題