Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Поиск файла в 2х дерикториях, сравнение версии и принятие решения

Ответить
Настройки темы
CMD/BAT - [решено] Поиск файла в 2х дерикториях, сравнение версии и принятие решения

Аватара для i-Lex

Старожил


Сообщения: 290
Благодарности: 3


Конфигурация

Профиль | Отправить PM | Цитировать


Нужен скрипт, который будет искать исполняемый файл программы в C:\Program Files\%ProgrammName%\ и в С:\Users\%UserName%\appdata\roaming\%ProgrammName%\ ,
Если находится только 1 исполняемый файл - копирует дополнительные файлы из директории, где находится скрипт в директорию программы. Если находятся оба - проверяет версию и копирует файлы в папку с более новой версией программы.

Такое возможно?

Отправлено: 21:27, 06-09-2012

 

Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Возможно.

Отправлено: 08:10, 07-09-2012 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Аватара для El Sanchez

Ветеран


Contributor


Сообщения: 1273
Благодарности: 1030

Профиль | Отправить PM | Цитировать


Цитата Iska:
Возможно. »
i-Lex, теория доказана, теперь практика:
Код: Выделить весь код
@Echo Off
SetLocal

Set ProgrammName=MyProgramName\program.exe

If Not Exist "%ProgramFiles%\%ProgrammName%" If Not Exist "%APPDATA%\%ProgrammName%" Exit /B 1

If Exist "%ProgramFiles%\%ProgrammName%" If Not Exist "%APPDATA%\%ProgrammName%" (
	:: Тут копируем файлы в %ProgramFiles% 
)
If Not Exist "%ProgramFiles%\%ProgrammName%" If Exist "%APPDATA%\%ProgrammName%" (
	:: Тут копируем файлы в %APPDATA%
)
If Exist "%ProgramFiles%\%ProgrammName%" If Exist "%APPDATA%\%ProgrammName%" (
	Echo:Wscript.Echo CreateObject^("Scripting.FileSystemObject"^).GetFileVersion^(WScript.Arguments^(0^)^)>"%~n0_filever.vbs"
	For /F "Tokens=*" %%A In ('cscript //nologo "%~n0_filever.vbs" "%ProgramFiles%\%ProgrammName%"') Do (
		For /F "Tokens=*" %%B In ('cscript //nologo "%~n0_filever.vbs" "%APPDATA%\%ProgrammName%"') Do (
			:: Версия файла в %ProgramFiles% новее
			If "%%A" GTR "%%B" (
				:: Копируем в %ProgramFiles%
			)
			:: Версия файла в %APPDATA% новее
			If "%%B" GTR "%%A" (
				:: Копируем в %APPDATA%
			)
		)
	)
	Del /F /Q "%~n0_filever.vbs" 2>nul 
)
Это сообщение посчитали полезным следующие участники:

Отправлено: 11:02, 07-09-2012 | #3


Аватара для i-Lex

Старожил


Сообщения: 290
Благодарности: 3

Профиль | Отправить PM | Цитировать


El Sanchez, скорее всего я не правильно применил скрипт, но скрипет ничего не выполнил.
Меня интересует строка
Код: Выделить весь код
 Set ProgrammName=MyProgramName\program.exe
В части MyProgramName\program.exe мне нужно вписать папку с программой и название самого файла программы?

Или нужно вместо %ProgrammName% прописать название папки с программой?

В обоих случая не работает(

Отправлено: 12:48, 09-09-2012 | #4


Аватара для El Sanchez

Ветеран


Contributor


Сообщения: 1273
Благодарности: 1030

Профиль | Отправить PM | Цитировать


Цитата i-Lex:
В части MyProgramName\program.exe мне нужно вписать папку с программой и название самого файла программы? »
i-Lex, да.

Цитата i-Lex:
В обоих случая не работает( »
i-Lex, в скрипте вместо операций копирования комментарии. Я ж не знаю в каком виде у вас дополнительные файлы в директории лежат: либо только файлы в директории, либо файлы в поддиректориях, либо там и там. Если нужно скопировать все и вся, после комментариев пишете соответственно:
Код: Выделить весь код
:: Тут копируем файлы в %ProgramFiles%
:: Копируем в %ProgramFiles%
Call XCopy /FYERH * "%ProgramFiles%\%%ProgrammName:%ProgrammName:*\=%=%%"&&Call Del /F /Q "%ProgramFiles%\%%ProgrammName:%ProgrammName:*\=%=%%%~0"

:: Тут копируем файлы в %APPDATA%
:: Копируем в %APPDATA%
Call XCopy /FYERH * "%APPDATA%\%%ProgrammName:%ProgrammName:*\=%=%%"&&Call Del /F /Q "%APPDATA%\%%ProgrammName:%ProgrammName:*\=%=%%%~0"

Отправлено: 14:44, 09-09-2012 | #5


Аватара для i-Lex

Старожил


Сообщения: 290
Благодарности: 3

Профиль | Отправить PM | Цитировать


El Sanchez, тоесть я правильно понял, что всё это будет выглядеть вот так:

Код: Выделить весь код
@Echo Off
SetLocal

Set ProgrammName=Lcx\lcx.exe

If Not Exist "%ProgramFiles%\%ProgrammName%" If Not Exist "%APPDATA%\%ProgrammName%" Exit /B 1

If Exist "%ProgramFiles%\%ProgrammName%" If Not Exist "%APPDATA%\%ProgrammName%" (
	:: Тут копируем файлы в %ProgramFiles% 
)
If Not Exist "%ProgramFiles%\%ProgrammName%" If Exist "%APPDATA%\%ProgrammName%" (
	:: Тут копируем файлы в %APPDATA%
)
If Exist "%ProgramFiles%\%ProgrammName%" If Exist "%APPDATA%\%ProgrammName%" (
	Echo:Wscript.Echo CreateObject^("Scripting.FileSystemObject"^).GetFileVersion^(WScript.Arguments^(0^)^)>"%~n0_filever.vbs"
	For /F "Tokens=*" %%A In ('cscript //nologo "%~n0_filever.vbs" "%ProgramFiles%\%ProgrammName%"') Do (
		For /F "Tokens=*" %%B In ('cscript //nologo "%~n0_filever.vbs" "%APPDATA%\%ProgrammName%"') Do (
			:: Версия файла в %ProgramFiles% новее
			If "%%A" GTR "%%B" (
				:: Копируем в %ProgramFiles%
			Call XCopy /FYERH * "%ProgramFiles%\%%ProgrammName:%ProgrammName:*\=%=%%"&&Call Del /F /Q "%ProgramFiles%\%%ProgrammName:%ProgrammName:*\=%=%%%~0"
			)
			:: Версия файла в %APPDATA% новее
			If "%%B" GTR "%%A" (
				:: Копируем в %APPDATA%
			Call XCopy /FYERH * "%APPDATA%\%%ProgrammName:%ProgrammName:*\=%=%%"&&Call Del /F /Q "%APPDATA%\%%ProgrammName:%ProgrammName:*\=%=%%%~0"	
			)
		)
	)
	Del /F /Q "%~n0_filever.vbs" 2>nul 
)
?

Отправлено: 19:58, 09-09-2012 | #6


Аватара для El Sanchez

Ветеран


Contributor


Сообщения: 1273
Благодарности: 1030

Профиль | Отправить PM | Цитировать


Цитата i-Lex:
тоесть я правильно понял, что всё это будет выглядеть вот так »
i-Lex, да, только добавьте аналогично к комментариям выше:
Код: Выделить весь код
@Echo Off
SetLocal

Set ProgrammName=Lcx\lcx.exe

If Not Exist "%ProgramFiles%\%ProgrammName%" If Not Exist "%APPDATA%\%ProgrammName%" Exit /B 1

If Exist "%ProgramFiles%\%ProgrammName%" If Not Exist "%APPDATA%\%ProgrammName%" (
	:: Тут копируем файлы в %ProgramFiles%
	Call XCopy /FYERH * "%ProgramFiles%\%%ProgrammName:%ProgrammName:*\=%=%%"&&Call Del /F /Q "%ProgramFiles%\%%ProgrammName:%ProgrammName:*\=%=%%%~0" 
)
If Not Exist "%ProgramFiles%\%ProgrammName%" If Exist "%APPDATA%\%ProgrammName%" (
	:: Тут копируем файлы в %APPDATA%
	Call XCopy /FYERH * "%APPDATA%\%%ProgrammName:%ProgrammName:*\=%=%%"&&Call Del /F /Q "%APPDATA%\%%ProgrammName:%ProgrammName:*\=%=%%%~0"
)
If Exist "%ProgramFiles%\%ProgrammName%" If Exist "%APPDATA%\%ProgrammName%" (
	Echo:Wscript.Echo CreateObject^("Scripting.FileSystemObject"^).GetFileVersion^(WScript.Arguments^(0^)^)>"%~n0_filever.vbs"
	For /F "Tokens=*" %%A In ('cscript //nologo "%~n0_filever.vbs" "%ProgramFiles%\%ProgrammName%"') Do (
		For /F "Tokens=*" %%B In ('cscript //nologo "%~n0_filever.vbs" "%APPDATA%\%ProgrammName%"') Do (
			:: Версия файла в %ProgramFiles% новее
			If "%%A" GTR "%%B" (
				:: Копируем в %ProgramFiles%
				Call XCopy /FYERH * "%ProgramFiles%\%%ProgrammName:%ProgrammName:*\=%=%%"&&Call Del /F /Q "%ProgramFiles%\%%ProgrammName:%ProgrammName:*\=%=%%%~0"
			)
			:: Версия файла в %APPDATA% новее
			If "%%B" GTR "%%A" (
				:: Копируем в %APPDATA%
				Call XCopy /FYERH * "%APPDATA%\%%ProgrammName:%ProgrammName:*\=%=%%"&&Call Del /F /Q "%APPDATA%\%%ProgrammName:%ProgrammName:*\=%=%%%~0"	
			)
		)
	)
	Del /F /Q "%~n0_filever.vbs" 2>nul 
)

Отправлено: 20:43, 09-09-2012 | #7


Аватара для i-Lex

Старожил


Сообщения: 290
Благодарности: 3

Профиль | Отправить PM | Цитировать


Нер аботает(Вот что выдаёт.

Последний раз редактировалось i-Lex, 31-07-2013 в 06:36.


Отправлено: 17:45, 10-09-2012 | #8


Аватара для i-Lex

Старожил


Сообщения: 290
Благодарности: 3

Профиль | Отправить PM | Цитировать


Ось ХРюша (если это важно)

Отправлено: 17:46, 10-09-2012 | #9


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


i-Lex, Вы в какой кодировке сохранили пакетный файл?!

Отправлено: 01:27, 11-09-2012 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Поиск файла в 2х дерикториях, сравнение версии и принятие решения

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] поиск и сравнение оригинального и резервной копии (.bak) одного и того же файла takoff Скриптовые языки администрирования Windows 4 11-10-2011 07:32
Route/Bridge - Сетевая задачка. Поиск оптимального решения comoc Сетевые технологии 4 04-08-2011 18:11
ATI поиск решения проблемы с HD2600PRO512 help!!! Pasha86 Видеокарты 14 07-12-2009 19:46
Сравнение новой версии любой программы с её актуализированным предшественником. ILMF Хочу все знать 5 11-10-2006 17:29




 
Переход