Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Условие для файлов в подпапках (http://forum.oszone.net/showthread.php?t=310349)

Uragan66 14-01-2016 10:09 2594669

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

Elven 14-01-2016 11:44 2594715

Писано на коленке, так что не проверял.

Код:

@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 2594719

Elven, спасибо большое ! Всё работает.

Iska 14-01-2016 12:03 2594727

Цитата:

Цитата Elven
Писано на коленке, так что не проверял. »

Цитата:

Цитата Uragan66
Всё работает. »

Насколько я вижу, это не совсем то, что описано. Тут проверяется наличие хотя бы одного *.jpg в хотя бы одной папке, а вовсе не:
Цитата:

Цитата Uragan66
если в каталоге откуда запускается батник и во всех подпапках данного каталога присутствуют файлы .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 2594728

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

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

Elven 14-01-2016 12:09 2594729

Iska, с && это я, конечно, упустил.

Georgio 14-01-2016 12:19 2594732

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 2594867

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 2594885

Цитата:

Цитата megaloman
Iska, а почему бы Ваше решение еще не укоротить? »

Потому как в оригинале было:
Цитата:

Цитата Uragan66
но уже с условием, что в каталоге и всех подпапках присутствуют файлы .jpg и .png »

Мы уже, конечно, выяснили, что начальные условия должны были быть совсем-совсем иными, но кто знает, что делает «program1.exe» с *.jpg — может она должна удалять некоторые из них в процессе работы?!

Georgio 14-01-2016 16:50 2594890

megaloman, думаю, коллега Iska, как и я, считает, что содержимое каталога после работы "program1" может изменяться.

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

Uragan66 15-01-2016 16:36 2595402

Цитата:

Цитата Iska
но кто знает, что делает «program1.exe» с *.jpg — может она должна удалять некоторые из них в процессе работы?! »

«program1.exe» , а это UV FilesCorrector к *.jpg имеет совсем посредственное отношение.
А если конкретнее, в папку ложится файл *.fb2, запускается программа fb2bin, которая извлекает картинки из fb2. И если среди картинок присутствует хотя бы одна *.jpg запускается «program1.exe», которая корректирует код fb2 меняя jpg на png. Затем запускается «program2.exe», а это IrfanView, котоорая конвертирует jpg в png. И fb2bin загоняет их обратно в файл fb2. Как-то так


Время: 22:00.

Время: 22:00.
© OSzone.net 2001-