2014-01-28 49 views
1

我試圖使用forfiles來檢查文件夾中是否有更新的.xlsx文件(小於1天),然後根據是否有更新的文件運行另一個bat文件。Forfiles循環/錯誤級別問題

最初我有一個這樣做的腳本,但有些天有多個新的.xlsx文件,所以腳本「循環」,並會多次運行success.bat文件。

如果找不到更新的文件,cmd將退出並顯示錯誤,所以我使用它來運行fail.bat文件。

這是我的時刻:

@echo on 
set found=0 
forfiles /p C:\ /m *.xlsx /d 0 /c "cmd /k set found=1" 
if /i %found%==1 (
Call Success.bat 
) else (
if /i %found%==0 (
Call Fail.bat 
) 
PAUSE 

現在能正常工作時有更新文件..也就是說,它擺脫了循環的問題。

不過我現在有,如果沒有更新的文件中找到cmd退出並使用

if ERRORLEVEL 1 call fail.bat 

似乎並沒有爲我工作了問題...... 我只是沒有好本,如果與.bat文件

回答

2
forfiles /p c:\ /m *.xlsx /d 0 2>nul && call Success.bat || call Fail.bat 

2>nul /別的東西將取消錯誤消息,您還可以添加>nul打壓標準輸出(通過forfiles找到任何文件)。如果擴展名不存在文件,則會設置一個錯誤級別 - 只有在設置了錯誤級別後,纔會發生||之後的命令。

因此,如果找不到具有指定擴展名的文件,則會調用Fail.bat,並跳到腳本的末尾。如果找到文件,它將調用Success.bat

+3

爲什麼不簡化成簡單的一行:'forfiles ... && call success.bat ||調用fail.bat'。另外,你忘了'/ d 0'選項。 – dbenham

+0

嘗試了這一點,添加了「/ d 0」,它運行Fail.bat,但如果它發現一個文件,它不會運行Success.bat – Slingy

+0

@dbenham謝謝,我編輯了我的答案。這太好了。 – unclemeat