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

Major_XXXX 07-06-2013 11:21 2163659

Нужна помощь в сравнении файлов и копировании
 
Доброго времени суток. Подскажите пожалуйста, как правильно написать BAT файл, который должен выполнять такую работу:
Проверить exe на локальном ПК и сравнить его с exe который находится на сервере (в локальной сети). Если файлы не идентичны (не важно что будет сравниваться, для примера, пусть сравнивает размер экзешников) - скопировать всю папку с сервера, на локальный комп с заменой файлов

P.S. может есть такая тема, но не нашел её на форуме. Пожалуйста помогите

Major_XXXX 07-06-2013 11:33 2163671

А если EXE на ПК и на сервере идентичны - то необходимо запустить exe с локальной машины

Iska 07-06-2013 11:50 2163681

Цитата:

Цитата Major_XXXX
А если EXE на ПК и на сервере идентичны - то необходимо запустить exe с локальной машины »

Код:

@echo off
setlocal enableextensions enabledelayedexpansion

set sFileName=procexp.exe
set sLocalPath=%ProgramFiles%\Sysinternals.com\Sysinternals Suite
set sRemotePath=\\live.sysinternals.com\tools

if exist "%sLocalPath%\%sFileName%" (
        if exist "%sRemotePath%\%sFileName%" (
                1>nul 2>&1 fc.exe /b "%sLocalPath%\%sFileName%" "%sRemotePath%\%sFileName%" && (
                        "%sLocalPath%\%sFileName%"
                )
|| (
                        xcopy.exe /e /f /h /r /k /y /z "%sRemotePath%\*.*" "%sLocalPath%\*.*"
                )
        ) else (
                echo Can't find remote file [%sRemotePath%\%sFileName%].
        )
) else (
        echo Can't find local file [%sLocalPath%\%sFileName%].
)

endlocal
exit /b 0


Major_XXXX 07-06-2013 11:54 2163686

Подскажите пожалуйста, а где он тут сравнивает файлы?

Iska 07-06-2013 11:58 2163689

Цитата:

Цитата Major_XXXX
а где он тут сравнивает файлы? »

Цитата:

Цитата Iska
Код:

… fc.exe /b "%sLocalPath%\%sFileName%" "%sRemotePath%\%sFileName%" …
»


Major_XXXX 07-06-2013 12:03 2163695

Can't find remote file [\\******\*****\**\**\***.exe]
Хотя файл там есть... что может быть?

С этим разобрался, скобочки забыл поставить.
Файлы оно сравнило, скопировало, но запуск exe с локального ПК не происходит...

Iska 07-06-2013 13:43 2163786

Цитата:

Цитата Major_XXXX
Can't find remote file [\\******\*****\**\**\***.exe]
Хотя файл там есть... что может быть?
С этим разобрался, скобочки забыл поставить. »

Какие скобки?

Цитата:

Цитата Major_XXXX
Файлы оно сравнило, скопировало, но запуск exe с локального ПК не происходит... »

Так и не должен. Вы как сказали?
Цитата:

Цитата Major_XXXX
если EXE на ПК и на сервере идентичны - то необходимо запустить exe »

Так и было сделано: если идентичны — происходит запуск. Всё в рамках ТЗ ;). Не более.

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

@echo off
setlocal enableextensions enabledelayedexpansion

set sFileName=procexp.exe
set sLocalPath=%ProgramFiles%\Sysinternals.com\Sysinternals Suite
set sRemotePath=\\live.sysinternals.com\tools

if exist "%sLocalPath%\%sFileName%" (
        if exist "%sRemotePath%\%sFileName%" (
                1>nul 2>&1 fc.exe /b "%sLocalPath%\%sFileName%" "%sRemotePath%\%sFileName%" || (
                        xcopy.exe /e /f /h /r /k /y /z "%sRemotePath%\*.*" "%sLocalPath%\*.*"
                )
        ) else (
                echo Can't find remote file [%sRemotePath%\%sFileName%].
        )
       
        "%sLocalPath%\%sFileName%"
) else (
        echo Can't find local file [%sLocalPath%\%sFileName%].
)

endlocal
exit /b 0


Major_XXXX 07-06-2013 15:20 2163850

Попробую рассказать ещё раз) может действительно неправильно выразил свою мысль.
есть (к примеру) 5 компов. на них установлен софт. и на сервере установлен тот же софт, в отдельную папку.
для того, чтобы не приходилось при обновлении софта инсталлировать на каждом ПК, необходим батник, который будет сверять версию exe файла на локальной машине, с той версией что установлена на сервере.
если на сервере установлена (распакована) более свежая версия:
по средствам батника (запуска у конечного пользователя) происходит следующее, копируются все файлы и папки с сервера на локальный комп, и запускается exe. если в результате сверки версий различий нету - ничего не копируется с сервера, и запускается всё тот же exe с локального компа

Major_XXXX 07-06-2013 15:47 2163863

То есть, с локального компа, должна быть запущена актуальная (последняя) версия exe.

Iska 07-06-2013 15:54 2163869

Major_XXXX, ну, и? Что не так?

Major_XXXX 07-06-2013 16:29 2163892

:( не стартует exe. пишет ошибку что ему не хватает ini файла. хотя он есть, и при запуске не через этот батник, прекрасно стартует

Iska 07-06-2013 17:11 2163921

Major_XXXX, скорее всего, приложение так криво написано, что ему критичен текущий каталог при запуске.

Два варианта:
читать дальше »
Код:

@echo off
setlocal enableextensions enabledelayedexpansion

set sFileName=procexp.exe
set sLocalPath=%ProgramFiles%\Sysinternals.com\Sysinternals Suite
set sRemotePath=\\live.sysinternals.com\tools

if exist "%sLocalPath%\%sFileName%" (
        if exist "%sRemotePath%\%sFileName%" (
                1>nul 2>&1 fc.exe /b "%sLocalPath%\%sFileName%" "%sRemotePath%\%sFileName%" || (
                        xcopy.exe /e /f /h /r /k /y /z "%sRemotePath%\*.*" "%sLocalPath%\*.*"
                )
        ) else (
                echo Can't find remote file [%sRemotePath%\%sFileName%].
        )
       
        pushd ""%sLocalPath%"
        "%sLocalPath%\%sFileName%"
        popd
) else (
        echo Can't find local file [%sLocalPath%\%sFileName%].
)

endlocal
exit /b 0

Код:

@echo off
setlocal enableextensions enabledelayedexpansion

set sFileName=procexp.exe
set sLocalPath=%ProgramFiles%\Sysinternals.com\Sysinternals Suite
set sRemotePath=\\live.sysinternals.com\tools

if exist "%sLocalPath%\%sFileName%" (
        if exist "%sRemotePath%\%sFileName%" (
                1>nul 2>&1 fc.exe /b "%sLocalPath%\%sFileName%" "%sRemotePath%\%sFileName%" || (
                        xcopy.exe /e /f /h /r /k /y /z "%sRemotePath%\*.*" "%sLocalPath%\*.*"
                )
        ) else (
                echo Can't find remote file [%sRemotePath%\%sFileName%].
        )
       
        start "" /d"%sLocalPath%" "%sLocalPath%\%sFileName%"
) else (
        echo Can't find local file [%sLocalPath%\%sFileName%].
)

endlocal
exit /b 0


Иначе, пишите как именно:
Цитата:

Цитата Major_XXXX
не через этот батник, прекрасно стартует »

сие осуществляете.

Major_XXXX 07-06-2013 17:22 2163933

Огромное Вам спасибо!!! Второй вариант запустил и сделал всё что было необходимо! :rupor:

Iska 07-06-2013 17:28 2163939

Major_XXXX, а первый вариант пробовали?

Major_XXXX 07-06-2013 17:31 2163941

:) я если честно, начал со второго. сейчас попробовал и первый. тоже работает. а в чем отличие?)

Iska 07-06-2013 18:17 2163975

Цитата:

Цитата Major_XXXX
а в чем отличие?) »

В использованных командах. Они выделены цветом в приведённом выше коде.


Время: 16:59.

Время: 16:59.
© OSzone.net 2001-