|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Проверка наличия файлов по списку и вызов контекстного действия |
|
CMD/BAT - Проверка наличия файлов по списку и вызов контекстного действия
|
Stalker_AleX333
Сообщения: n/a |
Народ, не пойму, правильно ли я сформировал список, проверяемый при запуске этого куска кода:
set "HDSoundsPackagesENGLocalization="Data\Unofficial HD Audio Project - ENG0.bsa" "Data\Unofficial HD Audio Project - ENG1.bsa" "Data\Unofficial HD Audio Project - ENG2.bsa" "Data\Unofficial HD Audio Project - ENG3.bsa" "Data\Unofficial HD Audio Project - ENG4.bsa"" set "HDSoundsPackagesRUSLocalization="Data\Unofficial HD Audio Project - RUS0.bsa" "Data\Unofficial HD Audio Project - RUS1.bsa" "Data\Unofficial HD Audio Project - RUS2.bsa" "Data\Unofficial HD Audio Project - RUS3.bsa" "Data\Unofficial HD Audio Project - RUS4.bsa"" set "HDSoundsPackagesENG&RUSLocalization="Data\Unofficial HD Audio Project - ENG0.bsa" "Data\Unofficial HD Audio Project - ENG1.bsa" "Data\Unofficial HD Audio Project - ENG2.bsa" "Data\Unofficial HD Audio Project - ENG3.bsa" "Data\Unofficial HD Audio Project - ENG4.bsa" "Data\Unofficial HD Audio Project - RUS0.bsa" "Data\Unofficial HD Audio Project - RUS1.bsa" "Data\Unofficial HD Audio Project - RUS2.bsa" "Data\Unofficial HD Audio Project - RUS3.bsa" "Data\Unofficial HD Audio Project - RUS4.bsa"" cls :: Это слишком убого. Фу бяка. :: Если установлены HD пакеты русско и англоязычной локализации - переходим в меню выбора языка озвучания if exist "%HDSoundsPackagesENG&RUSLocalization%" call :option_2_hd_sounds_packages_change_lang_localization :: Проверяем наличие HD пакетов англоязычной локализации if not exist "%HDSoundsPackagesENGLocalization%" ( :: Проверяем наличие HD пакетов русскоязычной локализации if not exist "%HDSoundsPackagesRUSLocalization%" call :option_2_install_hd_sounds_packages_error if exist "%HDSoundsPackagesRUSLocalization%" call :option_2_install_hd_sounds_packages_rus ) if exist "%HDSoundsPackagesENGLocalization%" call :option_2_install_hd_sounds_packages_eng :: Ошибка - выводимая при отсутствии HD пакетов локализации и музыки в папке с игрой :option_2_install_hd_sounds_packages_error cls color fc @echo. @echo *ОШИБКА! HD пакеты локализации не обнаружены в папке с игрой! @echo. pause goto :option_2_hd_sounds_packages_menu ) З.Ы. проверяемые файлы могут быть как из первого, второго, или обоих списков сразу. А действия нужны каждый раз разные. Наверное нихрена не понятно, но я дополню, если потребуется. |
|
Отправлено: 20:29, 10-04-2020 |
fascinating rhythm Сообщения: 6626
|
Профиль | Отправить PM | Цитировать Вы бы описали задачу словами - что нужно, и приложили иерархию тестовых файлов (можно просто пустые txt) в zip.
Разбираться в чужом коде (который, к тому же, не работает), удовольствие, поверьте, сильно ниже среднего. |
------- Отправлено: 11:43, 11-04-2020 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 1274
|
Профиль | Отправить PM | Цитировать Цитата Stalker_AleX333:
@echo off if exist q* echo ok for %%a in (q*) do if exist %%a echo %%a if exist *.txt echo ok for %%a in (*.txt) do if exist %%a echo %%a pause |
|
Последний раз редактировалось alpap, 06-04-2021 в 18:01. Отправлено: 14:57, 11-04-2020 | #3 |
Stalker_AleX333
Сообщения: n/a |
DJ Mogarych, ок, попытаюсь.
У нас имеется два набора файлов (озвучка для игры, упакованная в архивы формата .bsa. Идентичны в названиях и количестве, за исключением окончания ENG\RUS). В первом наборе\пакете - русскоязычная локализация. Во втором - англоязычная. Юзер скачивает и устанавливает себе желаемый пакет (или оба, если хочет менять локализацию "на ходу"), запускаемый батник проверяет какие архивы доступны и на основе этого предлагает выбрать желаемый для подключения (записать те или иные параметры в файлах конфигурации игры). Алгоритм: Какой пакет есть? Русский - call :option_2_install_hd_sounds_packages_rus Английский - call :option_2_install_hd_sounds_packages_eng Есть и то и другое? - call :option_2_install_hd_sounds_packages_eng&rus Ничего не нашли? - call :option_2_install_hd_sounds_packages_error |
Отправлено: 20:13, 11-04-2020 | #4 |
Stalker_AleX333
Сообщения: n/a |
upd.
Разобрался. Поиск по списку функционирует, но встала проблема с пробелами в именах файлов. В таком виде он не работает. Не знаю как еще экранировать список. Как пример, так не работает: set "SoundsPackagesList="Data\pack 1.bsa" "Data\pack 2.bsa" "Data\pack N.bsa"" if exist "%SoundsPackagesList%" echo ok set "%SoundsPackagesList%="pack 1.bsa" "pack 2.bsa" "pack N.bsa"" cd Data\ if exist "%SoundsPackagesList%" echo ok cd .. |
|
Последний раз редактировалось Stalker_AleX333, 16-04-2020 в 00:42. Отправлено: 22:28, 15-04-2020 | #5 |
Старожил Сообщения: 352
|
Профиль | Отправить PM | Цитировать Цитата Stalker_AleX333:
|
|
Отправлено: 01:09, 16-04-2020 | #6 |
Stalker_AleX333
Сообщения: n/a |
|
Отправлено: 11:48, 16-04-2020 | #7 |
Старожил Сообщения: 352
|
Профиль | Отправить PM | Цитировать Stalker_AleX333,
Например так
set "list="file1" "file2" "file3"" pushd "C:\path\to\files" call :checkExistAll %list% if errorlevel 1 (echo error) else (echo ok) call :checkExistAny %list% if errorlevel 1 (echo error) else (echo ok) pause exit /b :: checkExistAll возвращает 0, если все файлы существуют, иначе 1 :checkExistAll set exitcode=0 for %%f in (%*) do if not exist "%%f" set exitcode=1 exit /b %exitcode% :: checkExistAnyвозвращает 0, если хотя бы один файл из списка существует, иначе 1 :checkExistAny set exitcode=1 for %%f in (%*) do if exist "%%f" set exitcode=0 exit /b %exitcode% Кроме того
set "HDSoundsPackagesENG&RUSLocalization="Data\Unofficial HD Audio Project - ENG0.bsa" "Data\Unofficial HD Audio Project - ENG1.bsa" "Data\Unofficial HD Audio Project - ENG2.bsa" "Data\Unofficial HD Audio Project - ENG3.bsa" "Data\Unofficial HD Audio Project - ENG4.bsa" "Data\Unofficial HD Audio Project - RUS0.bsa" "Data\Unofficial HD Audio Project - RUS1.bsa" "Data\Unofficial HD Audio Project - RUS2.bsa" "Data\Unofficial HD Audio Project - RUS3.bsa" "Data\Unofficial HD Audio Project - RUS4.bsa"" Лучше, пока ещё не поздно, сваливать в сторону PoSh, WSH, Inno, NSIS, ... Порог входа в скриптинг на батниках низкий, но потом, по мере усложнения батника, повылазят особенности этого архаичного интерпретатора, с которыми придётся сражаться вместо написания полезного кода |
Отправлено: 18:43, 16-04-2020 | #8 |
Stalker_AleX333
Сообщения: n/a |
Вот, нашел подходящий код и мне помогли "направить" его в нужное русло:
:: Проверяем наличие HD пакетов англоязычной локализации for %%F in (%HDSoundsPackagesENGLocalization%) do (if exist "Data\%%~F" set /a HDSoundsPackagesENG+=1) :: Проверяем наличие HD пакетов русскоязычной локализации for %%F in (%HDSoundsPackagesRUSLocalization%) do (if exist "Data\%%~F" set /a HDSoundsPackagesRUS+=1) if %HDSoundsPackagesENG% equ 5 ( if %HDSoundsPackagesRUS% equ 5 ( call :option_2_hd_sounds_packages_change_localization ) else ( call :option_2_install_hd_sounds_packages_eng ) ) else ( if %HDSoundsPackagesRUS% equ 5 ( call :option_2_install_hd_sounds_packages_rus ) else ( :: Ошибка - выводимая при отсутствии HD пакетов локализации и музыки в папке с игрой cls color fc @echo. @echo. @echo *ОШИБКА! HD пакеты локализации не обнаружены в папке с игрой! @echo. @echo. @echo Используйте предыдущее меню для их загрузки. @echo Если вы уверены в корректности установки, свяжитесь с автором сборки и предоставьте информацию о всей последовательности действий. @echo. @echo. pause goto :option_2_hd_sounds_packages_menu |
Отправлено: 20:59, 16-04-2020 | #9 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Любой язык - Проверка наличия файлов | Svnkill | Скриптовые языки администрирования Windows | 9 | 17-02-2018 22:40 | |
Любой язык - [решено] Проверка наличия файлов перед запуском приложения | Armsinglom | Скриптовые языки администрирования Windows | 2 | 15-07-2017 13:50 | |
VBS/WSH/JS - [решено] Проверка наличия и запуск нескольких файлов | id342181564@vk | Скриптовые языки администрирования Windows | 8 | 03-04-2017 21:17 | |
CMD/BAT - проверка наличия файлов | neprotiv | Скриптовые языки администрирования Windows | 0 | 04-04-2013 22:09 | |
VBS/WSH/JS - [решено] Проверка наличия файлов в папке | lesha73 | Скриптовые языки администрирования Windows | 2 | 17-01-2012 16:45 |
|