Показать полную графическую версию : Проверка наличия файлов
Привет
Есть папка с файлами и приложением C:\update\
Нужно что бы .bat (или VBS, не имеет значения) проверял наличие файлов в папке C:\update\
После проверки, файлов если всё хорошо то просто закрывался, если какого-то файла не хватает то запускал приложение C:\update\update.exe.
Проверку нужно осуществлять по названию файлов.
P.s: Заранее в скрипте указать, что в папке C:\update\ должен лежать (например) файл с названием libavutil-55.dll и так далее.
Если одного из файлов нет, то приложение запускается.
Darkar25
16-02-2018, 18:48
код не мой...
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
@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 перечислите все файлы
Запускаем »
Это слово можно написать на английском? Или вообще не писать?
Между :FilesSpisok и GoTo :Eof перечислите все файлы »
А папку как прописать? И если в ней есть файлы
megaloman
16-02-2018, 19:45
Svnkill, Напишите или не пишите - дело Ваше. А еще лучше, сохраните батник с этим словом и со списком файлов, если там есть русские буквы, в 866 (Dos) кодировке - редакторов с такими возможностями предостаточно (в Far-менеджере, AkelPad и т д)
866 кодировка - практически стандарт для написания CMD файлов, это рудимент MS Dos
Папка с файлами и файл для запуска прописываются в
Set "BoxIn=С:\update"
Set "Exe=С:\update\update.exe"
Между :FilesSpisok и GoTo :Eof перечислите все файлы в папке, прописанной в BoxIn, которые Вы хотите контролировать.
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 возможен скрипт?
@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 »
Этот скрипт требует подтверждения (для продолжения нажмите любую кнопку) , а мне надо без него.
Скрин-шот, пожалуйста. »
151304
Единственное, где скрипт может остановиться, после Pause, а Pause достигается только в том случае, если исходные данные не верны: »
В то и суть что все прописано правильно. Когда просто через bat запускаю то все нормально. А когда конвертирую в exe он не хочет работать без подтверждения, и то чтобы его получить надо полазить в диспетчере.
Можно как то без подтверждения?
megaloman
17-02-2018, 21:28
Svnkill, Тот вариант скрипта, наверное, работать при конвертации в Exe не будет. После конвертации не читается список файлов, как это отображено в скрин-шоте. Обязан себя похвалить - сделал диагностику этого положения вещей :).Когда просто через 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, Спасибо, ты красавчик)
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.