PDA

Показать полную графическую версию : [решено] Проверка установки определенных файлов в директорию


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

amel27
27-05-2010, 12:28
korenza, дайте для примера список файлов, с которым сравнивать на предмет полной установки

korenza
27-05-2010, 12:31
<папка_установки_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
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
Выдает, что не удается считать строки из \base.gif \base_tab.gif \branch.gif \tn.ico .
Может можно как-нибудь с помощью Do If EXIST ??

korenza
27-05-2010, 14:31
amel27, Спасибо, есть от чего отталкиваться, буду искать варианты

amel27
27-05-2010, 15:43
Выдает, что не удается считать строки из \base.gif \base_tab.gif \branch.gif \tn.ico »
упс, дико извиняюсь - этот скрипт ищет файлы не из списка, а это совсем другая задача :beta:
можно как-нибудь с помощью 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
Все, вроде, в порядке. Только один момент, после обработки БАТ-ника в консоли остается путь к директории, указанный в ROOT, а не тот путь откуда он запускался. Это можно, как-нибудь исправить? А так огромное спасибо. Буду стараться изучать дальше сам.

amel27
27-05-2010, 17:15
Это можно, как-нибудь исправить? »
добавить в конце команду POPD

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

amel27
28-05-2010, 16:10
в папке Apache существуют подпапки тоже с файлами? »
указывайте в списке файлы с относительными путями:
base.gif
DIR1\base_tab.gif
DIR2\branch.gif
DIR3\tn.ico

gora
28-05-2010, 16:46
От файла списка можно отказаться, если поместить список в тело скрипта:@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
Проблема в том, что код
@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
korenza, а откуда брать значение ROOT?.. как вариант:

Set ROOT=%~1
Set INCL=%~2
...и подставлять путь/список в командную строку:
install.cmd "C:\Program Files\Apache" "apache.lst"

korenza
03-06-2010, 12:35
Добавил такую конструкцию
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
Отсутствует файл: 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
В том-то и вопрос, что я ее, собственно так и добавил %ROOT%\%%i
Если такого файла нет диске C: , то он честно пишет отсутствует файл: весь путь.
Как только создаю точно-такой же путь на диске D: выдает такую гадость Отсутствует файл: D:\Файл1

amel27
03-06-2010, 13:25
korenza, не понял, у вас файлы приложения разнесены по разным дискам?.. так без проблем:
install.cmd "D:\Program Files\Apache" "apache.lst"




© OSzone.net 2001-2012