PDA

Показать полную графическую версию : [решено] Условие для файлов в подпапках


Uragan66
14-01-2016, 10:09
Никак не получается совсем простой батник.
Нужно задать условие для запуска program1 если в каталоге откуда запускается батник и во всех подпапках данного каталога присутствуют файлы .jpg. После завершения работы program1 нужно запустить program2, но уже с условием, что в каталоге и всех подпапках присутствуют файлы .jpg и .png
Поскажите, пожалуйста как это реализовать, а то совсем запутался.

Elven
14-01-2016, 11:44
Писано на коленке, так что не проверял.

@echo off
dir /s /b /a-d *.jpg > NUL
if %errorlevel%==0 (
start /wait program1
) else (
exit /b 1
)
dir /s /b /a-d *.jpg > NUL
if %errorlevel%==0 (
dir /s /b /a-d *.png > NUL
if %errorlevel%==0 (
start /wait program2
) else (
exit /b 3
)
) else (
exit /b 2
)

Uragan66
14-01-2016, 11:52
Elven, спасибо большое ! Всё работает.

Iska
14-01-2016, 12:03
Писано на коленке, так что не проверял. »
Всё работает. »
Насколько я вижу, это не совсем то, что описано. Тут проверяется наличие хотя бы одного *.jpg в хотя бы одной папке, а вовсе не:
если в каталоге откуда запускается батник и во всех подпапках данного каталога присутствуют файлы .jpg. »


Elven, можно проще записать:
>nul 2>&1 dir /s /a:-d "*.jpg" && (
start /wait program1.exe
>nul 2>&1 dir /s /a:-d "*.jpg" && >nul 2>&1 dir /s /a:-d "*.png" && start /wait program2.exe
)
Тоже не проверялось :).

Uragan66
14-01-2016, 12:09
Iska,
Цитата Iska:
Насколько я вижу, это не совсем то, что описано. Тут проверяется наличие хотя бы одного *.jpg в хотя бы одной папке »

Это как раз то, что надо было (наличие хотя бы одного *.jpg). Мои извинения, сразу неправильно описал.
P.S. По вашему коду тоже все работает. Спасибо !

Elven
14-01-2016, 12:09
Iska, с && это я, конечно, упустил.

Georgio
14-01-2016, 12:19
Elven, строка "%errorlevel%" внутри конструкции в скобках будет выдавать неверный результат. Нужно использовать отложенное расширение переменных и строку "!errorlevel!".

А я бы сделал так:

@echo off

cmd/c for /r %%i in ("*.jpg") do @start ""/w "calc.exe"^& exit/b
cmd/c for /r %%i in ("*.jpg") do @for /r %%i in ("*.png") do @start ""/w "notepad.exe"^& exit/b

.


В фильме снимались:

"calc.exe" -- в роли "program1",

"notepad.exe" -- в роли "program2".

:)

megaloman
14-01-2016, 16:00
Iska, а почему бы Ваше решение еще не укоротить?
>nul 2>&1 Dir /s /A:-D *.jpg && (start /wait Calc.exe & >nul 2>&1 Dir /s /A:-D *.png && start /wait notepad.exe)
ИМХО, у Вас лишний поиск jpg во втором случае. Извините за наглость :)

Iska
14-01-2016, 16:42
Iska, а почему бы Ваше решение еще не укоротить? »
Потому как в оригинале было:
но уже с условием, что в каталоге и всех подпапках присутствуют файлы .jpg и .png »
Мы уже, конечно, выяснили, что начальные условия должны были быть совсем-совсем иными, но кто знает, что делает «program1.exe» с *.jpg — может она должна удалять некоторые из них в процессе работы?!

Georgio
14-01-2016, 16:50
megaloman, думаю, коллега Iska, как и я, считает, что содержимое каталога после работы "program1" может изменяться.

Кстати, мой вариант должен работать быстрее, так как после нахождения первого подходящего файла дальнейший поиск прекращается.

Uragan66
15-01-2016, 16:36
но кто знает, что делает «program1.exe» с *.jpg — может она должна удалять некоторые из них в процессе работы?! »
«program1.exe» , а это UV FilesCorrector к *.jpg имеет совсем посредственное отношение.
А если конкретнее, в папку ложится файл *.fb2, запускается программа fb2bin, которая извлекает картинки из fb2. И если среди картинок присутствует хотя бы одна *.jpg запускается «program1.exe», которая корректирует код fb2 меняя jpg на png. Затем запускается «program2.exe», а это IrfanView, котоорая конвертирует jpg в png. И fb2bin загоняет их обратно в файл fb2. Как-то так




© OSzone.net 2001-2012