PDA

Показать полную графическую версию : Передача пути через переменную в NSIS


Dezmont777
22-08-2012, 01:20
Доброй ночи. Раньше не имел дела с командной строкой, но сейчас решил сделать себе маленький скрипт тихой установки для небольшой подборки программ.
@echo off
set mydir="D:\Program Files\"
pause
IF NOT EXIST %mydir%AntRenamer antrenamer2_install.exe /VERYSILENT /DIR=%mydir%AntRenamer
IF NOT EXIST %mydir%XnView XnView-win.exe /VERYSILENT /DIR=%mydir%XnView
IF NOT EXIST %mydir%Notepad++ npp.6.1.6.Installer.exe /S /D=%mydir%Notepad++
IF NOT EXIST %mydir%Paint.NET Paint.NET.3.5.10.Install.exe /auto "TARGETDIR=%mydir%Paint.NET"

В общем для Inno (XnView,AntRenamer) всё нормально устанавливается, если указана переменная. Notepad++ и Paint.NET не устанавливаются, если путь указан с использованием переменной. Если указать напрямую:
/D=D:\Program Files\Notepad++ и "TARGETDIR=D:\Program Files\Paint.NET", то всё работает нормально. (((
Подскажите пожалуйста, как поправить?

K.A.V.
22-08-2012, 11:05
Подскажите пожалуйста, как поправить? »
1. Уберите кавычки из переменной "mydir"
2. Заключите в кавычки путь определяемой директории


set mydir=C:\Program Files\
IF NOT EXIST "%mydir%Notepad++" "npp.6.1.6.Installer.exe" /S /D=%mydir%Notepad++

Dezmont777
22-08-2012, 20:00
K.A.V., спасибо большое, но Ваш вариант не работает. Если Вы тестировали свой вариант, и он работает, то это потому, что по умолчанию NP++ устанавливается на системный диск. И если в параметре /D присутствуют какие-нибудь ошибки, то он автоматом ставится в C:\Program Files\.

K.A.V.
22-08-2012, 20:06
Dezmont777, у вас был полный путь, я тестировал с таким же, вот и всё

Что мешает указать переменную программной директории?


@echo off
set mydir=%ProgramFiles%\
IF NOT EXIST "%mydir%Notepad++" "npp.6.1.6.Installer.exe" /S /D=%mydir%Notepad++

Dezmont777
23-08-2012, 00:27
K.A.V., может вы меня немного неверно поняли, объясню ещё раз.
Без ключа /D программа Notepad++ автоматически ставится в %ProgramFiles% или %ProgramFiles(x86)% (переменные среды, равные С:\Program Files\ или C:\Program Files(x86) соответственно).
Мне же необходимо в переменной указать путь, на НЕсистемный диск, например: D:\Program Files\ . Это значение я задаю через переменную %mydir%.

Следующий вариант всё равно устанавливает NP++ в C:\Program Files(x86). Как только не пытался я выставлять кавычки, всё равно не работает.
@echo off
set mydir=D:\Program Files\
IF NOT EXIST "%mydir%Notepad++2" npp.6.1.6.Installer.exe /S /D=%mydir%"Notepad++2"

Нормально работает только такой вариант:
@echo off
pause
set mydir=D:\
IF NOT EXIST "%mydir%Program Files\Notepad++2" "npp.6.1.6.Installer.exe" /S /D=%mydir%"Program Files\Notepad++2"

Всё дело в пробеле. Может его можно как-нибудь экранировать или ещё что-нибудь сделать? Я чувствую, истина где-то рядом :)
P.S. Ещё раз повторюсь, 1-ый раз столкнулся с batниками, так что не ругайте, если сильно туплю...

K.A.V.
23-08-2012, 00:47
Всё дело в пробеле. »
А мне кажется, всё дело в кривости пакета инсталлятора, к которому вы обращаетесь

Посмотрите в архиве bat файл с моим примером кода
+ в архиве EXE файл написанный на NSIS
После запуска bat файла, данный небольшой EXE на NSIS покажет директорию "установки" (переданную в параметр /D) и параметры запуска инсталлятора

Dezmont777
23-08-2012, 01:06
K.A.V., понятно. Спасибо Вам большое :) Сам бы ни за что на косяк разработчиков не подумал....




© OSzone.net 2001-2012