Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Проверка наличия файла(ов) в указанных подпапках с выводом сообщения при ошибке

Ответить
Настройки темы
CMD/BAT - [решено] Проверка наличия файла(ов) в указанных подпапках с выводом сообщения при ошибке
Stalker_AleX333


Сообщения: n/a

Профиль | Цитировать


Народ, выручайте!

Для этих команд нужно предварительно проверить наличие определенных файлов в подпапках (указанных в команде удаления). При отсутствии оных не выполнять данный код и выдать ошибку (в виде заготовленного сообщения) в окне.

Код: Выделить весь код
@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"

Отправлено: 20:18, 24-08-2017

 

Ветеран


Сообщения: 2196
Благодарности: 727

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
...
pushd "%~dp0"
2>nul del /f /q "Data\Static Mesh Improvement.*" | 1>nul findstr "."
if errorlevel 0 (echo Ошибка удаления Static Mesh Improvement.*)
popd

Отправлено: 21:24, 24-08-2017 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.

Stalker_AleX333


Сообщения: n/a

Профиль | Цитировать


Хм... Не пашет. Сообщение выводится вне зависимости от того есть ли искомый(ые) файл(ы) в подпапках.
Да и мне не нужно сначала пытаться удалять файлы, а в случае ошибки выводить что-либо на экран. Достаточно проверки наличия файла(ов) по указанному адресу.

Что-то вроде:

Код: Выделить весь код
@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, 24-08-2017 в 23:59.


Отправлено: 23:38, 24-08-2017 | #3


Ветеран


Сообщения: 2196
Благодарности: 727

Профиль | Отправить PM | Цитировать


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 не найден.

Отправлено: 00:01, 25-08-2017 | #4


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Достаточно будет:
Код: Выделить весь код
>nul 2>&1 dir "Data\Static Mesh Improvement.*" "Data\Textures\architecture\windhelm\whruinstonedark2.*" | echo Not found.
Но какой в этом смысл?! Что нет файлов, что они есть, но всё равно удаляются — результат один и тот же.

Отправлено: 00:07, 25-08-2017 | #5

Stalker_AleX333


Сообщения: n/a

Профиль | Цитировать


Так, что-то я совсем запутался.

Цитата Iska:
Достаточно будет:
Код:
>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"


И да, можно как-нибудь раскрасить только определенные строки, выводимые в консоль, а не все сообщение целиком?

Последний раз редактировалось Stalker_AleX333, 25-08-2017 в 13:55.


Отправлено: 00:23, 25-08-2017 | #6



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Проверка наличия файла(ов) в указанных подпапках с выводом сообщения при ошибке

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Любой язык - проверка наличия файла в директории icetanker Скриптовые языки администрирования Windows 11 19-10-2014 21:37
VBS/WSH/JS - Проверка наличия файла в папке в случае отсутствия перезагружать компьютер NickCom Программирование и базы данных 4 19-08-2013 05:13
CMD/BAT - [решено] автоматическая проверка наличия файла и его шифрование DorianWolf Скриптовые языки администрирования Windows 2 10-12-2012 17:31
Любой язык - [решено] Проверка наличия файла на веб-сервере Vadikan Скриптовые языки администрирования Windows 5 20-05-2011 01:22
CMD/BAT - [решено] Определение атрибута файла & проверка наличия процесса user_123 Скриптовые языки администрирования Windows 10 19-11-2010 16:15




 
Переход