Показать полную графическую версию : [решено] Проверка наличия файла(ов) в указанных подпапках с выводом сообщения при ошибке
Stalker_AleX333
24-08-2017, 20:18
Народ, выручайте!
Для этих команд нужно предварительно проверить наличие определенных файлов в подпапках (указанных в команде удаления). При отсутствии оных не выполнять данный код и выдать ошибку (в виде заготовленного сообщения) в окне.
@cls
@echo off
:: Копирование отсортированного списка плагинов
set "BoxOut=%LOCALAPPDATA%\Skyrim Special Edition"
set "FileIn=Plugins.txt"
if not exist "%BoxOut%" md "%BoxOut%"
copy /y "%FileIn%" "%BoxOut%\"
:: Очистка сборки от устаревших файлов
setlocal enableextensions enabledelayedexpansion
pushd "%~dp0" & (
del /f /q "Data\Static Mesh Improvement.*" "Data\Textures\architecture\windhelm\whruinstonedark2.*" и т.д.
popd
)
endlocal
:: Удаляем сам cmd-шник
del "%~dpnx0"
...
pushd "%~dp0"
2>nul del /f /q "Data\Static Mesh Improvement.*" | 1>nul findstr "."
if errorlevel 0 (echo Ошибка удаления Static Mesh Improvement.*)
popd
Stalker_AleX333
24-08-2017, 23:38
Хм... Не пашет. Сообщение выводится вне зависимости от того есть ли искомый(ые) файл(ы) в подпапках.
Да и мне не нужно сначала пытаться удалять файлы, а в случае ошибки выводить что-либо на экран. Достаточно проверки наличия файла(ов) по указанному адресу.
Что-то вроде:
@cls
@echo off
:: Проверка доступности файлов игры и копирование отсортированного списка плагинов
if exist SkyrimSE.exe set "BoxOut=%LOCALAPPDATA%\Skyrim Special Edition"
set "FileIn=Plugins.txt"
if not exist "%BoxOut%" md "%BoxOut%"
copy /y "%FileIn%" "%BoxOut%\"
:: Очистка сборки от устаревших файлов
setlocal enableextensions enabledelayedexpansion
pushd "%~dp0" & (
del /f /q "Data\Static Mesh Improvement.*" "Data\Textures\architecture\windhelm\whruinstonedark2.*"
popd
)
endlocal
:: Удаляем сам cmd(exe)-шник
del "%~dpnx0"
:: Если файлы игры не найдены
else
@color C
@echo.
@echo ------------------------------------------------------------------
@echo Утилита очистки Silver Raven mods pack от устаревших файлов
@echo Пакет обновления до версии 1.2.5
@echo ------------------------------------------------------------------
@echo.
@echo.
@echo *ВНИМАНИЕ! Данная утилита не предназначена для ручного запуска вне папки с игрой! Перезаупустите приложение из папки с игрой или архив с обновлением для корректной работы.
@echo.
@echo Примечание: приложение работает в скрытом режиме, без вывода данных в консоль и автоматически удаляется по завершении очистки сборки.
@echo.
pause
exit
Stalker_AleX333, в таком случае запускайте цикл перебора всех вариаций Static Mesh Improvement.
Что-то типа этого, без рекурсии
@echo off
for /f %%a in ('dir /b /a-d "путь\Data\Static Mesh Improvement.*" 2^>nul') do if not exist "путь\Data\%%a" echo %%a не найден.
Достаточно будет:
>nul 2>&1 dir "Data\Static Mesh Improvement.*" "Data\Textures\architecture\windhelm\whruinstonedark2.*" | echo Not found.
Но какой в этом смысл?! Что нет файлов, что они есть, но всё равно удаляются — результат один и тот же.
Stalker_AleX333
25-08-2017, 00:23
Так, что-то я совсем запутался.
Достаточно будет:
Код:
>nul 2>&1 dir "Data\Static Mesh Improvement.*" "Data\Textures\architecture\windhelm\whruinstonedark2.*" | echo No »
Это куда? В начало cmd-шника или тело функции удаления файлов?
sov44, перебирать не придется. Правильное расположение cmd-шника строго известно (в данном случае это папка с игрой), а сканируется лишь одна из ее подпапок. Но можно еще проще. Проверять по её (игры) exe-шнику в той же директории откуда запустили, если его нет - шлем лесом и пишем сообщение в консоль.
Вот так, вроде, работает:
@cls
@echo off
@color C
:: Проверка доступности файлов игры
setlocal enableextensions enabledelayedexpansion
set "GameExeFile=SkyrimSE.exe"
If not exist "%GameExeFile%" ( echo.
echo ╔═════════════════════════════════════════════════════════════════╗
echo Утилита очистки Silver Raven mods pack от устаревших файлов
echo Пакет обновления до версии 1.2.5
echo ╚═════════════════════════════════════════════════════════════════╝
echo.
echo.
echo *ВНИМАНИЕ! Данная утилита полностью автоматизирована и не предназначена для ручного запуска вне папки с игрой! Перезаупустите приложение из папки с игрой или архив с обновлением для корректной работы.
echo.
echo Примечание: приложение работает в скрытом режиме, без вывода данных в консоль и автоматически удаляется по завершении очистки сборки.
echo.
pause
exit
)
:: Копирование отсортированного списка плагинов
if exist set "BoxOut=%LOCALAPPDATA%\Skyrim Special Edition"
set "FileIn=Plugins.txt"
if not exist "%BoxOut%" md "%BoxOut%"
copy /y "%FileIn%" "%BoxOut%\"
:: Очистка сборки от устаревших файлов
pushd "%~dp0" & (
del /f /q "Data\Static Mesh Improvement.*" "Data\Textures\architecture\windhelm\whruinstonedark2.*"
popd
)
endlocal
:: Удаляем сам cmd-шник
del "%~dpnx0"
И да, можно как-нибудь раскрасить только определенные строки, выводимые в консоль, а не все сообщение целиком?
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.