2014-01-28 3 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 || call fail.bat'. Кроме того, вы забыли опцию '/ d 0'. – dbenham

+0

Пробовал это, добавил «/ d 0», и он работает, чтобы запустить Fail.bat, но если он найдет файл, он не запустит Success.bat – Slingy

+0

@dbenham Спасибо, я отредактировал свой ответ. Это намного лучше. – unclemeat

Смежные вопросы