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

korenza 27-05-2010 12:21 1422126

Проверка установки определенных файлов в директорию
 
Доброго времени суток.
Задача такова. При установке программы на машину необходимо проверить, все ли файлы установились и в правильные директории. Если какой-то файлы не установились выводится сообщение, такие-то файлы не установлены. Организовать необходимо с помощью задания относительного адреса. Как я предполагаю, проверка происходит с помощью цикла for. Но я начинающий дуб. Может кто сможет помочь в решении этой задачи, буду признателен.

amel27 27-05-2010 12:28 1422129

korenza, дайте для примера список файлов, с которым сравнивать на предмет полной установки

korenza 27-05-2010 12:31 1422133

<папка_установки_apache>\htdocs\images
1. await.gif
2. base.gif
3. base_tab.gif
4. branch.gif
5. tn.ico

amel27 27-05-2010 12:49 1422139

korenza, примерно так:
Код:

@Echo Off

Set ROOT=C:\Program Files\Apache
Set INCL=apache.lst

For /F "Delims=" %%i In ('DIR /B/A-D/S "%ROOT%\*"^|FindStr /IVEG:"%INCL%"') Do (
msg * /W "Отсутствует файл: %%i")

ROOT - путь к каталогу с программой, INCL - имя файла списка в виде (относительно ROOT):

Код:

\base.gif
\base_tab.gif
\branch.gif
\tn.ico


korenza 27-05-2010 13:19 1422152

Выдает, что не удается считать строки из \base.gif \base_tab.gif \branch.gif \tn.ico .
Может можно как-нибудь с помощью Do If EXIST ??

korenza 27-05-2010 14:31 1422211

amel27, Спасибо, есть от чего отталкиваться, буду искать варианты

amel27 27-05-2010 15:43 1422246

Цитата:

Цитата korenza
Выдает, что не удается считать строки из \base.gif \base_tab.gif \branch.gif \tn.ico »

упс, дико извиняюсь - этот скрипт ищет файлы не из списка, а это совсем другая задача :beta:
Цитата:

Цитата korenza
можно как-нибудь с помощью Do If EXIST ?? »

Код:

@Echo Off

Set ROOT=C:\Program Files\Apache
Set INCL=apache.lst

PushD %ROOT%
For /F "UseBackQ Delims=" %%i In ("%~dp0%INCL%") Do If Not Exist %%i (
msg * Отсутствует файл: %%i)

Код:

base.gif
base_tab.gif
branch.gif
tn.ico


korenza 27-05-2010 16:42 1422284

Все, вроде, в порядке. Только один момент, после обработки БАТ-ника в консоли остается путь к директории, указанный в ROOT, а не тот путь откуда он запускался. Это можно, как-нибудь исправить? А так огромное спасибо. Буду стараться изучать дальше сам.

amel27 27-05-2010 17:15 1422303

Цитата:

Цитата korenza
Это можно, как-нибудь исправить? »

добавить в конце команду POPD

korenza 28-05-2010 10:58 1422771

amel27 , в процессе возник вопрос, а возможно ли модифицировать это код, прописав в ROOT путь, к примеру C:\Program Files\Apache, но в папке Apache существуют подпапки тоже с файлами? Этот код работает только если указывать путь к конкретной папке.

amel27 28-05-2010 16:10 1423042

Цитата:

Цитата korenza
в папке Apache существуют подпапки тоже с файлами? »

указывайте в списке файлы с относительными путями:
Код:

base.gif
DIR1\base_tab.gif
DIR2\branch.gif
DIR3\tn.ico


gora 28-05-2010 16:46 1423061

От файла списка можно отказаться, если поместить список в тело скрипта:
Код:

@Echo Off

Set ROOT=C:\Program Files\Apache

For %%i In (
        "base.gif"
        "DIR 1\base_tab.gif"
        "DIR 2\branch.gif"
        "DIR 3\tn.ico"
) Do If Not Exist "%ROOT%\%%~i" msg * Отсутствует файл: %ROOT%\%%~i


korenza 03-06-2010 11:11 1426471

Проблема в том, что код
Код:

@Echo Off
Set ROOT=C:\Program Files\Apache
Set INCL=apache.lst 
PushD %ROOT% For /F "UseBackQ Delims=" %%i In ("%~dp0%INCL%") Do If Not Exist %%i ( msg * Отсутствует файл: %%i)

Работает, но необходимо не менять в батнике каждый раз Set ROOT=C:\Program Files\Apache

amel27 03-06-2010 11:29 1426485

korenza, а откуда брать значение ROOT?.. как вариант:
Код:

Set ROOT=%~1
Set INCL=%~2

...и подставлять путь/список в командную строку:
Код:

install.cmd "C:\Program Files\Apache" "apache.lst"

korenza 03-06-2010 12:35 1426521

Добавил такую конструкцию
Код:

FOR %%I IN (c d e f g h i j k l m n o p q r s t u v w x y z) DO IF EXIST %%I:\Папка1\Папка2\Папка3\Папка4\  Set ROOT= %%I:
Если прога установлена на С: ,то все путем, записывает в текстовый файл, что нет таких-то файлов. Как создаю такой же путь на диске D: выводит в текстовом файле Отсутствует файл: d:\await.gif и т.д. без конкретного пути. По идее должна быть запись что Отсутствует файл: C:\Папка1\Папка2\Папка3\Папка4\файл1 и D:\Папка1\Папка2\Папка3\Папка4\файл1

amel27 03-06-2010 12:53 1426539

Цитата:

Цитата korenza
Отсутствует файл: d:\await.gif и т.д. без конкретного пути. По идее должна быть запись что Отсутствует файл: C:\Папка1\Папка2\Папка3\Папка4\файл1 и D:\Папка1\Папка2\Папка3\Папка4\файл1 »

скрипт определяет пути относительно папки приложения, можно добавить её в итоговый путь:
Код:

@Echo Off

Set ROOT=%~1
Set INCL=%~2

PushD %ROOT%
For /F "UseBackQ Delims=" %%i In ("%~dp0%INCL%") Do If Not Exist %%i (
msg * Отсутствует файл: %ROOT%\%%i)


korenza 03-06-2010 13:11 1426548

В том-то и вопрос, что я ее, собственно так и добавил %ROOT%\%%i
Если такого файла нет диске C: , то он честно пишет отсутствует файл: весь путь.
Как только создаю точно-такой же путь на диске D: выдает такую гадость Отсутствует файл: D:\Файл1

amel27 03-06-2010 13:25 1426557

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

install.cmd "D:\Program Files\Apache" "apache.lst"


Время: 07:42.

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