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

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » Любой язык - Проверка наличия файлов

Ответить
Настройки темы
Любой язык - Проверка наличия файлов

Новый участник


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

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


Привет
Есть папка с файлами и приложением C:\update\
Нужно что бы .bat (или VBS, не имеет значения) проверял наличие файлов в папке C:\update\
После проверки, файлов если всё хорошо то просто закрывался, если какого-то файла не хватает то запускал приложение C:\update\update.exe.
Проверку нужно осуществлять по названию файлов.

P.s: Заранее в скрипте указать, что в папке C:\update\ должен лежать (например) файл с названием libavutil-55.dll и так далее.
Если одного из файлов нет, то приложение запускается.

Отправлено: 16:47, 16-02-2018

 

Пользователь


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

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


код не мой...
NoTot - кол-во отсутсвующих файлов
NoFil - отсутсвующие файлы
Код: Выделить весь код
set NoTot=0  
set NoFil=  
 
for %%a in ( "file1.exe" "file2.exe" "file3.exe") do call :ChkFile %%a  
 
if %NoTot% == 0 тут команда если все файлы есть

echo FILES %NoFil% NOT EXISTS!(%NoTot% Files)
тут команда если какой-то из файлов отсутсвует
:ChkFile
if exist %1 goto :eof  
set NoFil=%NoFil% %1  
set /a NoTot=%NoTot%+1  
goto :eof
если батник запускается не в папке где проверяются файлы в начале кода пишем cd C:\путь

Последний раз редактировалось Darkar25, 16-02-2018 в 18:55.


Отправлено: 18:48, 16-02-2018 | #2



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

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


Ветеран


Contributor


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

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


Возможный вариант решения CMD/Bat
Код: Выделить весь код
@Echo Off
cls

Set "BoxIn=С:\update"
Set "Exe=С:\update\update.exe"

If Not Exist "%Exe%" (
	Echo Exe File "%Exe%" not found &Echo: &Pause &Exit /B 1
) 
Pushd "%BoxIn%"
If Not %Errorlevel%==0 (
	Echo Input folder "%BoxIn%" not found &Echo: &Pause &Exit /B 2
)
Set /A Nbeg=0
For /F "usebackq delims=:" %%i In (`"FINDSTR /B /L /I /N /C:":FilesSpisok" "%~dpnx0""`) DO Set /A Nbeg=%%i
If %Nbeg% EQU 0 Echo !!! No file list found &Pause &Exit /B 240

For /F "usebackq tokens=*" %%i In (`"more +%Nbeg% "%~dpnx0""`) DO (
	If /I "%%i"=="GoTo :Eof" (Popd &Exit /B 0)
	If Not Exist "%%i" (Echo File "%BoxIn%\%%i" not found &Echo Запускаем "%Exe%" &"%Exe%" &Popd &GoTo :Eof) 
)
GoTo :Eof

:FilesSpisok

update.exe
libavutil-55.dll
Всякая фигня.hlp
и так далее.jpg

GoTo :Eof
Между :FilesSpisok и GoTo :Eof перечислите все файлы

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 16-02-2018 в 19:47.

Это сообщение посчитали полезным следующие участники:

Отправлено: 19:22, 16-02-2018 | #3


Новый участник


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

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


Цитата megaloman:
Запускаем »
Это слово можно написать на английском? Или вообще не писать?

Цитата megaloman:
Между :FilesSpisok и GoTo :Eof перечислите все файлы »
А папку как прописать? И если в ней есть файлы

Отправлено: 19:39, 16-02-2018 | #4


Ветеран


Contributor


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

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


Svnkill, Напишите или не пишите - дело Ваше. А еще лучше, сохраните батник с этим словом и со списком файлов, если там есть русские буквы, в 866 (Dos) кодировке - редакторов с такими возможностями предостаточно (в Far-менеджере, AkelPad и т д)
866 кодировка - практически стандарт для написания CMD файлов, это рудимент MS Dos

Папка с файлами и файл для запуска прописываются в
Set "BoxIn=С:\update"
Set "Exe=С:\update\update.exe"

Между :FilesSpisok и GoTo :Eof перечислите все файлы в папке, прописанной в BoxIn, которые Вы хотите контролировать.

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 16-02-2018 в 19:51.

Это сообщение посчитали полезным следующие участники:

Отправлено: 19:45, 16-02-2018 | #5


Новый участник


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

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


megaloman, Спасибо)

Отправлено: 20:08, 16-02-2018 | #6


Новый участник


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

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


Цитата Darkar25:
Код: Выделить весь код
set NoTot=0 
set NoFil= 
for %%a in ( "file1.exe" "file2.exe" "file3.exe") do call :ChkFile %%a 
if %NoTot% == 0 тут команда если все файлы есть
echo FILES %NoFil% NOT EXISTS!(%NoTot% Files)
тут команда если какой-то из файлов отсутсвует
:ChkFile
if exist %1 goto :eof 
set NoFil=%NoFil% %1 
set /a NoTot=%NoTot%+1 
goto :eof
»
Не работает. Есть у кого то еще решения? На VBS возможен скрипт?

Цитата megaloman:
Код: Выделить весь код
@Echo Off
cls
Set "BoxIn=С:\update"
Set "Exe=С:\update\update.exe"
If Not Exist "%Exe%" (
 Echo Exe File "%Exe%" not found &Echo: &Pause &Exit /B 1
) 
Pushd "%BoxIn%"
If Not %Errorlevel%==0 (
 Echo Input folder "%BoxIn%" not found &Echo: &Pause &Exit /B 2
)
Set /A Nbeg=0
For /F "usebackq delims=:" %%i In (`"FINDSTR /B /L /I /N /C:":FilesSpisok" "%~dpnx0""`) DO Set /A Nbeg=%%i
If %Nbeg% EQU 0 Echo !!! No file list found &Pause &Exit /B 240
For /F "usebackq tokens=*" %%i In (`"more +%Nbeg% "%~dpnx0""`) DO (
 If /I "%%i"=="GoTo :Eof" (Popd &Exit /B 0)
 If Not Exist "%%i" (Echo File "%BoxIn%\%%i" not found &Echo Запускаем "%Exe%" &"%Exe%" &Popd &GoTo :Eof) 
)
GoTo :Eof
:FilesSpisok
update.exe
libavutil-55.dll
Всякая фигня.hlp
и так далее.jpg
GoTo :Eof
»
Этот скрипт требует подтверждения (для продолжения нажмите любую кнопку) , а мне надо без него.

Последний раз редактировалось Svnkill, 17-02-2018 в 20:20.


Отправлено: 20:07, 17-02-2018 | #7


Новый участник


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

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



Цитата megaloman:
Скрин-шот, пожалуйста. »
Снимок экрана (101).png

Цитата megaloman:
Единственное, где скрипт может остановиться, после Pause, а Pause достигается только в том случае, если исходные данные не верны: »
В то и суть что все прописано правильно. Когда просто через bat запускаю то все нормально. А когда конвертирую в exe он не хочет работать без подтверждения, и то чтобы его получить надо полазить в диспетчере.

Можно как то без подтверждения?

Отправлено: 20:51, 17-02-2018 | #8


Ветеран


Contributor


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

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


Svnkill, Тот вариант скрипта, наверное, работать при конвертации в Exe не будет. После конвертации не читается список файлов, как это отображено в скрин-шоте. Обязан себя похвалить - сделал диагностику этого положения вещей .
Цитата Svnkill:
Когда просто через bat запускаю то все нормально. »
То есть, дело именно в конвертации.
Вот еще вариант
Код: Выделить весь код
@Echo Off
cls

Set "BoxIn=С:\update"
Set "Exe=С:\update\update.exe"
Set Files="update.exe" "libavutil-55.dll" "Всякая фигня.hlp" "и так далее.jpg"

Pushd "%BoxIn%"
If Not %Errorlevel%==0 (
	Echo Input folder "%BoxIn%" not found &Echo: &Pause &Exit /B 2
)
If Not Exist "%Exe%" (
	Echo Exe File "%Exe%" not found &Echo: &Pause &Exit /B 1
) 
FOR %%i IN (%Files%) DO If Not Exist "%%~i" (Echo File "%BoxIn%\%%~i" not found &Echo Start "%Exe%" &"%Exe%" &Popd &GoTo :Eof)
Я не берусь судить, как поведёт себя батник после конвертации.
Аккуратно пропишите пути и список файлов

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 17-02-2018 в 21:41.

Это сообщение посчитали полезным следующие участники:

Отправлено: 21:28, 17-02-2018 | #9


Новый участник


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

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


megaloman, Спасибо, ты красавчик)

Отправлено: 22:40, 17-02-2018 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » Любой язык - Проверка наличия файлов

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Любой язык - [решено] Проверка наличия файлов перед запуском приложения Armsinglom Скриптовые языки администрирования Windows 2 15-07-2017 13:50
VBS/WSH/JS - [решено] Проверка наличия и запуск нескольких файлов id342181564@vk Скриптовые языки администрирования Windows 8 03-04-2017 21:17
PowerShell - Проверка наличия процесса botkin1 Скриптовые языки администрирования Windows 0 12-05-2016 07:33
CMD/BAT - проверка наличия файлов neprotiv Скриптовые языки администрирования Windows 0 04-04-2013 22:09
VBS/WSH/JS - [решено] Проверка наличия файлов в папке lesha73 Скриптовые языки администрирования Windows 2 17-01-2012 16:45




 
Переход