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

Svnkill 16-02-2018 16:47 2798411

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

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

Darkar25 16-02-2018 18:48 2798424

код не мой...
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:\путь

megaloman 16-02-2018 19:22 2798428

Возможный вариант решения 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 перечислите все файлы

Svnkill 16-02-2018 19:39 2798432

Цитата:

Цитата megaloman
Запускаем »

Это слово можно написать на английском? Или вообще не писать?

Цитата:

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

А папку как прописать? И если в ней есть файлы

megaloman 16-02-2018 19:45 2798433

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

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

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

Svnkill 16-02-2018 20:08 2798437

megaloman, Спасибо)

Svnkill 17-02-2018 20:07 2798613

Цитата:

Цитата 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:51 2798634

Вложений: 1
Цитата:

Цитата megaloman
Скрин-шот, пожалуйста. »

Файл 151304

Цитата:

Цитата megaloman
Единственное, где скрипт может остановиться, после Pause, а Pause достигается только в том случае, если исходные данные не верны: »

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

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

megaloman 17-02-2018 21:28 2798651

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)

Я не берусь судить, как поведёт себя батник после конвертации.
Аккуратно пропишите пути и список файлов

Svnkill 17-02-2018 22:40 2798670

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


Время: 07:38.

Время: 07:38.
© OSzone.net 2001-