Форум программистов, компьютерный форум, киберфорум
Наши страницы
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
bort-747
43 / 65 / 9
Регистрация: 07.06.2013
Сообщений: 484
Записей в блоге: 1
1

Копирование файлов с новой версией

23.01.2014, 13:26. Просмотров 1188. Ответов 18
Метки нет (Все метки)

Доброго дня
Помогите пожалуйста
Есть три компьютера с шарами. На первом компьютере я выкладываю файлы инсталяторы (битторент, адоб ридер, дежавю ридер, ява) нужно что бы батник на втором и третьем компьютере смотрел на эти файлы в первый компьютер и при обновлении версии на первом копировал на свой, если только на своем не такаяже версия.
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.01.2014, 13:26
Ответы с готовыми решениями:

Копирование: Ввод имени папки и копирование из нее файлов
Доброго времени суток! Реально ли реализовать подобное с помощью bat ? Знаю,...

Копирование файлов из разных каталогов в каталоги с именами, соответствующими номерам в именах файлов
Добрый день! Помогите решить проблему. Есть семь папок (cam_1, cam_2, cam_3...

Копирование файлов из одной папки в другую, но с пропуском одинаковых файлов в этих папках
Доброго времени суток. Прошу помощи в написании батника. Задача: Есть папка...

Копирование файлов с переименованием в случае совпадения имён перемещаемых и имеющихся в папке назначения файлов
Добрый день. Помогите создать bat файл. Смысл в чем есть папка загрузки на...

Копирование файлов с FTP-сервера на компьютеры клиентов без замены уже имеющихся файлов
Приветствую. Такая задача. имеется фтп сервер. на нем лежит 5 папок, в каждой...

18
Borodа
98 / 92 / 8
Регистрация: 07.08.2013
Сообщений: 299
23.01.2014, 22:12 2
А каким образом он узнает, что версия новая?
По дате создания файла? По имени? По версии, которая хранится в заголовке exe/msi?
0
Dragokas
Эксперт WindowsАвтор FAQ
17055 / 7110 / 861
Регистрация: 25.12.2011
Сообщений: 10,920
Записей в блоге: 16
23.01.2014, 23:04 3
Bash
1
xcopy /M /U /C /R /Y /I /K \\host\Share$\*.* \\comp1\Dest$
Будет копировать все те файлы, которые совпадают по имени с теми, что уже есть на целевом компе.
После копирования атрибут "Архивный" с исходного файла будет снят и повторное копирование происходить не будет.

Можно еще через ROBOCOPY:
Bash
1
robocopy \\host\Share$ \\comp1\Dest$ adobe.msi /XO
0
bort-747
43 / 65 / 9
Регистрация: 07.06.2013
Сообщений: 484
Записей в блоге: 1
24.01.2014, 12:23  [ТС] 4
Цитата Сообщение от Borodа Посмотреть сообщение
А каким образом он узнает, что версия новая?
По дате создания файла? По имени? По версии, которая хранится в заголовке exe/msi?
Есть необходимость по версии файла. Но как узнать версию файла я так и не нашёл.
Наткнулся на один параметр, пытался его применить к другим, ничего не получилось
Вот пример http://support.kaspersky.ru/images/7008-3-ru14-107495.png
Я думаю что прийдётся в ручную создавать на первом компьюте текстовый файл типа info в котором будут прописаны названия файлов и через разделитель (допустим точка с запятой или табуляция) указывать версию файла...
0
Borodа
98 / 92 / 8
Регистрация: 07.08.2013
Сообщений: 299
24.01.2014, 12:27 5
bort-747, вас скриншот ниочем. Это уже версия установленной программы. Версия установщика может отличаться. По этому и спросил каким образом скрипт должен определять версию.

Собственно если список софта конечен и есть какая-то возможность определить для каждого отдельно взятого софта версию (скажем по inf файлу в архиве, по имени файла инсталлера, еще как), то можно начать писать батник с отдельными секциями для каждого софта. Добавилась софтинка -- дописали секцию по определению версии именно этой софтинки.
0
Smitis
1629 / 338 / 40
Регистрация: 15.10.2012
Сообщений: 530
24.01.2014, 14:56 6
Определить версию исполняего файла можно через WSH, например, через VBS
Visual Basic
1
CreateObject("Scripting.FileSystemObject").GetFileVersion(file)
Или тулзой filever от MS и разбирать её вывод.
2
bort-747
43 / 65 / 9
Регистрация: 07.06.2013
Сообщений: 484
Записей в блоге: 1
24.01.2014, 19:07  [ТС] 7
Цитата Сообщение от Borodа Посмотреть сообщение
bort-747, вас скриншот ниочем. Это уже версия установленной программы. Версия установщика может отличаться. По этому и спросил каким образом скрипт должен определять версию.

Собственно если список софта конечен и есть какая-то возможность определить для каждого отдельно взятого софта версию (скажем по inf файлу в архиве, по имени файла инсталлера, еще как), то можно начать писать батник с отдельными секциями для каждого софта. Добавилась софтинка -- дописали секцию по определению версии именно этой софтинки.
Ну вот как вытянуть с инсталятора с помошью бат версию я не знаю
Могу привести примеры инсталяторов, знаю где смотреть но как вытящить не понимаю...

Добавлено через 8 минут
Цитата Сообщение от Smitis Посмотреть сообщение
Или тулзой filever от MS и разбирать её вывод.
Тулза для XP c SP2, на Win7 сыпится
0
Borodа
98 / 92 / 8
Регистрация: 07.08.2013
Сообщений: 299
24.01.2014, 19:23 8
Цитата Сообщение от bort-747 Посмотреть сообщение
Могу привести примеры инсталяторов, знаю где смотреть
Будет очень полезно.
0
Smitis
1629 / 338 / 40
Регистрация: 15.10.2012
Сообщений: 530
24.01.2014, 19:51 9
Цитата Сообщение от bort-747 Посмотреть сообщение
Тулза для XP c SP2, на Win7 сыпится
Win 7 x86 - ничего не "сыпится"
0
Dragokas
Эксперт WindowsАвтор FAQ
17055 / 7110 / 861
Регистрация: 25.12.2011
Сообщений: 10,920
Записей в блоге: 16
24.01.2014, 22:30 10
bort-747, win7x64. Все работает.
proof на скрине. MD5 = 0E6C873A80940C9729BC8017AD67B2DE
0
Миниатюры
Копирование файлов с новой версией  
Вложения
Тип файла: zip filever.zip (6.8 Кб, 8 просмотров)
Eva Rosalene
Ladybug
4052 / 1591 / 303
Регистрация: 06.01.2013
Сообщений: 4,188
Завершенные тесты: 2
24.01.2014, 22:34 11
Лучше и нативнее через WSH-обертку на JS
0
Dragokas
Эксперт WindowsАвтор FAQ
17055 / 7110 / 861
Регистрация: 25.12.2011
Сообщений: 10,920
Записей в блоге: 16
24.01.2014, 22:35 12
Лучший ответ Сообщение было отмечено bort-747 как решение

Решение

Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
@echo off
SetLocal EnableExtensions
set src=\\Share1\file.exe
set dest=\\Share2\file.exe
call :getVer "%src%" version1
call :getVer "%dest%" version2
if "%version1%" neq "%version2%" copy /Y "%src%" "%dest%"
pause
exit /B
 
:getVer
For /F "tokens=1*" %%a in ('filever /V "%~1"^|find "FileVersion"') do set "%~2=%%b"
exit /B
2
bort-747
43 / 65 / 9
Регистрация: 07.06.2013
Сообщений: 484
Записей в блоге: 1
28.01.2014, 13:29  [ТС] 13
А можно, так скажем, перевернуть алгоритм...
Комп проверяет на своей шаре исходный с двумя другими и если на другом или третем компе файл не соответсвует то заменит там где не соответсвует?
0
Dragokas
Эксперт WindowsАвтор FAQ
17055 / 7110 / 861
Регистрация: 25.12.2011
Сообщений: 10,920
Записей в блоге: 16
28.01.2014, 21:24 14
bort-747, собственно - что тут переворачивать.
Share1 - в моем примере - основной.
Нужно сверяться еще и на третьем - продублируйте 6-7 строки кода.

Bash
1
2
3
4
5
6
:: ...
set dest2=\\Share3\file.exe
:: ...
 
call :getVer "%dest2%" version3
if "%version1%" neq "%version3%" copy /Y "%src%" "%dest2%"
1
bort-747
43 / 65 / 9
Регистрация: 07.06.2013
Сообщений: 484
Записей в блоге: 1
10.02.2014, 12:35  [ТС] 15
Цитата Сообщение от Dragokas Посмотреть сообщение
bort-747, собственно - что тут переворачивать.
Share1 - в моем примере - основной.
Нужно сверяться еще и на третьем - продублируйте 6-7 строки кода.

Bash
1
2
3
4
5
6
:: ...
set dest2=\\Share3\file.exe
:: ...
 
call :getVer "%dest2%" version3
if "%version1%" neq "%version3%" copy /Y "%src%" "%dest2%"
Я сделал как Вы и сказали только поставил в цикл, и почему то выпадает в ошибку
Собственно сам BATник
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
:Start
 
@echo off
SetLocal EnableExtensions
set src=\\Share1\file.exe
set dest=\\Share2\file.exe
set dest2=\\Share3\file.exe
set dest3=\\Share4\file.exe
call :getVer "%src%" version1
call :getVer "%dest%" version2
call :getVer "%dest2%" version3
call :getVer "%dest3%" version4
if "%version1%" neq "%version2%" copy /Y "%src%" "%dest%"
if "%version1%" neq "%version3%" copy /Y "%src%" "%dest2%"
if "%version1%" neq "%version4%" copy /Y "%src%" "%dest3%"
 
:getVer
For /F "tokens=1*" %%a in ('filever /V "%~1"^|find "FileVersion"') do set "%~2=%%b"
 
Goto :Start
А вот сама ошибка:
0
Миниатюры
Копирование файлов с новой версией  
bort-747
43 / 65 / 9
Регистрация: 07.06.2013
Сообщений: 484
Записей в блоге: 1
10.02.2014, 12:58  [ТС] 16
Цитата Сообщение от Borodа Посмотреть сообщение
Будет очень полезно.
Не всё влезло в архив, потому даю некоторые ссылки
http://download.skype.com/b60a581173...SkypeSetup.msi
http://download.macromedia.com/get/f...2_active_x.msi
http://download.macromedia.com/get/f..._12_plugin.msi
Как узнать версию?
0
Вложения
Тип файла: rar inst.rar (2.96 Мб, 3 просмотров)
Smitis
1629 / 338 / 40
Регистрация: 15.10.2012
Сообщений: 530
10.02.2014, 19:47 17
Цитата Сообщение от bort-747 Посмотреть сообщение
Не всё влезло в архив, потому даю некоторые ссылки
Ну и загнул. Это не экзешники, где просто узнать версию (да и то не всегда).
Можно посмотреть в сторону MsiTool, вдруг там есть что-то полезное.
0
bort-747
43 / 65 / 9
Регистрация: 07.06.2013
Сообщений: 484
Записей в блоге: 1
11.02.2014, 09:53  [ТС] 18
Цитата Сообщение от Smitis Посмотреть сообщение
Ну и загнул. Это не экзешники, где просто узнать версию (да и то не всегда).
Можно посмотреть в сторону MsiTool, вдруг там есть что-то полезное.
Здесь ест параметр: "Редакция"
0
Smitis
1629 / 338 / 40
Регистрация: 15.10.2012
Сообщений: 530
17.02.2014, 11:49 19
Цитата Сообщение от bort-747 Посмотреть сообщение
Здесь ест параметр: "Редакция"
Изначально шла речь об определении версии ФАЙЛОВ. А файлы бывают разные. Исполняемые файлы (PE) могут иметь в своих ресурсах номер версии. А могут и не иметь. А ещё у них версия, как минимум, в двух вариантах FileVersion и ProductVersion, причём оба могут быть как в бинарном виде, так и в текстовом и не факт, что все четыре будут совпадать. MSI файл может иметь свои параметры, которые интерпретируются как "версия", которую ещё надо как-то из него достать, и не обязательно эта версия будет коррелироваться с версиями исполняемых файлов. Любые другие файлы тоже могут иметь версию, записаную в каком-либо виде.
К чему всё это - понятие "версия" достаточно расплывчато, поэтому однозначного решения нет. Каждый случай нужно расматривать индивидуально.

Но есть и радостный момент - через msi это ДОЛЖНО решаться просто. Групповые политики там, и пр. Но тут я пас.
0
17.02.2014, 11:49
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.02.2014, 11:49

Копирование файлов по списку в текстовом файле в папки с именами, соответствующими расширениям этих файлов
Добрый день, уважаемые форумчане. Прошу помощи с написанием bat-файла. Значит...

Копирование отсутствующих и изменённых файлов по результатам сверки файлов одного каталога с файлами другого
Всем привет. такая вот задача у меня. я не селен в этом. но стараюсь. есть 2...

Копирование файлов с переименованием в случае совпадения имён копируемых и имеющихся в папке назначения файлов
Доброго времени суток. Убедительная просьба, помогите пожалуйста решить...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru