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>
閱讀關於延遲擴展,變量集內部(代碼塊)需要特殊處理,可以是'setlocal EnableDelayedExpansion'並使用'!size!'或者做一個僞調用加倍的百分號'調用if%%size %% ..' – LotPings
解決方法是[延遲擴展](http://ss64.com/nt/delayedexpansion.html),因爲您正在更改*和*讀取相同的變量在相同的代碼塊中:'if%size%gtr%minbytesize%' - >'if!size! gtr%minbytesize%'和'setlocal EnableDelayedExpansion'在腳本的頂部... – aschipfl
@LotPings,恐怕'call'不會和'if'一起工作,因爲命令解釋器識別出'if'令牌早於'call'; ''''''''''''和'rem'對於'cmd'而言是特殊的,與所有其他命令標記相比... – aschipfl