Компьютерный форум 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=329311)

Stalker_AleX333 24-08-2017 20:18 2760567

Проверка наличия файла(ов) в указанных подпапках с выводом сообщения при ошибке
 
Народ, выручайте!

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

Код:

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


sov44 24-08-2017 21:24 2760575

Код:

...
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 2760594

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

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

Код:

@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


sov44 25-08-2017 00:01 2760596

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


Iska 25-08-2017 00:07 2760597

Достаточно будет:
Код:

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

Stalker_AleX333 25-08-2017 00:23 2760599

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

Цитата:

Цитата 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"



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


Время: 13:41.

Время: 13:41.
© OSzone.net 2001-