[cmd] cicha instalacja

witam

od kilku dni pisze sobie skrypcik instalujacy niezbedne oprogramowanie po instalacji

w folderze instalki kazdy mialby swoj folder

i w kazdym folderze bylby program instalacyjny plus jakis dokument tekstowy zawierajacy

  • nazwe programu

  • jego wersje

  • system w jakim moze byc zainstalowany (95, 98, 2000, nt, 2013, xp, vista, seven, eight, )

  • polecenie do cichej instalacji

  1. potrzebuje petle wykonujaca sie tyle razy ile jest folderow w folderze install

  2. z kazdego folderu wyciagnac nalezy plik tekstowy i wyswietlic nazwe, wersje, opis i pytanie zainstalowac T/N po wybraniu T - wykonac cicha instalacje tego programu

dokladanie kolejnych programow bedzie bardzo proste - bo wystarczy utwozyc odpowiedni folder, w nim wrzucic program instalacyjny i odpowiedni dokument tekstowy

narazie stworzylem takie cos:

:: -- Skrypt do cichej instalacji niezbednych programow w systemie windows -- ::


@echo off

title "www.ictlaboratory.com"

color 70



IF NOT EXIST d:\Temp md d:\Temp

START /WAIT REGEDIT /S my.reg

BlackThemeXP.exe /S




echo === MENU ==============================================

echo.

echo 1. Cicha (bez zadawania zbednych pytan)

echo 2. Uzytkownika (pyta sie o kazdy program)

echo 3. Wyjscie

echo.

echo =======================================================


:start

set /p userinp=wybierz numer(1-3):

set userinp=%userinp:~0,1%

if "%userinp%"=="1" goto silent

if "%userinp%"=="2" goto user

if "%userinp%"=="3" exit

echo zly wybór

goto start



:: =========================================================

:silent

cls

@echo ***********************************************************

@echo ***********************************************************

@echo ****

@echo **Trwa instalacja, prosze czekac.**

@echo **www.ictlaboratory.com**

@echo ****

@echo ***********************************************************

@echo ***********************************************************


echo Installing: K-Lite Mega Codec Pack

"K-Lite_Codec_Pack_965_Mega.exe" /verysilent /norestart /LoadInf=".\klcp_mega_unattended.ini"

echo Done!


echo Installing: Google Chrome

"chromeStandaloneSetup.exe" /silent /install

echo Done!


echo Installing: Avast

"avast_free_antivirus_setup.exe" /verysilent /forceinstall 

echo Done!


echo Installing: Adobe Acrobat Reader 11.0.0.1

"adberd11001\setup.exe"

echo Done!


echo Installing: Adobe Flash Player 11.5

msiexec /qn /norestart /i "%~dp0install_flash_player_11_plugin.msi"

echo Done!


echo Installing: Java 7 update 11

"chromeinstall-7u11.exe" /s

echo Done!


echo Installing: Picasa 3.9

"picasa39-setup.exe" /S /L /L2

echo Done!



echo Installing: Skype

msiexec /i SkypeSetup.msi STARTSKYPE=FALSE /qf

echo Done!


goto exit



:: =======================================================

:user

cls

@echo ***********************************************************

@echo ***********************************************************

@echo ****

@echo **Trwa instalacja, prosze czekac.**

@echo **www.ictlaboratory.com**

@echo ****

@echo ***********************************************************

@echo ***********************************************************


SET /P ANSWER=Instalowac K-lite Mega Codec Pack v9.6.5 (Y/N)?

if /i {%ANSWER%}=={y} ("K-Lite_Codec_Pack_965_Mega.exe" /verysilent /norestart /LoadInf=".\klcp_mega_unattended.ini" && echo Sukces!!)


SET /P ANSWER=Instalowac Google Chrome Version 24.0.1312.52 m (Y/N)?

if /i {%ANSWER%}=={y} ("chromeStandaloneSetup.exe" /silent /install && echo Sukces!!)


SET /P ANSWER=Instalowac Avast Free Antyvirus version 7.0.1474(Y/N)?

if /i {%ANSWER%}=={y} ("avast_free_antivirus_setup.exe" /verysilent /forceinstall && echo Sukces!!)


SET /P ANSWER=Instalowac Adobe Acrobat Reader 11.0.0.1 (Y/N)?

if /i {%ANSWER%}=={y} ("adberd11001\setup.exe" && echo Sukces!!)


SET /P ANSWER=Instalowac Adobe Flash Player 11.5 (Y/N)?

if /i {%ANSWER%}=={y} (msiexec /qn /norestart /i "%~dp0install_flash_player_11_plugin.msi" && echo Sukces!!)


SET /P ANSWER=Instalowac Java 7 update 11 (Y/N)?

if /i {%ANSWER%}=={y} ("chromeinstall-7u11.exe" /s && echo Sukces!!)


SET /P ANSWER=Instalowac Picasa 3.9 (Y/N)?

if /i {%ANSWER%}=={y} ("picasa39-setup.exe" /S /L /L2 && echo Sukces!!)


SET /P ANSWER=Instalowac Skype 6.1.0.129(Y/N)?

if /i {%ANSWER%}=={y} (msiexec /i SkypeSetup.msi STARTSKYPE=FALSE /qf && echo Sukces!!)


goto exit


:: =======================================================

:exit

::: -- End of application --

@ECHO.&ECHO.Press any key to end the application.&PAUSE>NUL&GOTO:EOF

exit

ale dokladanie kolejnych programow jest bardzo niewygodne :frowning:

@for /D %%i in (*) do call ProceedOneFolder.bat %%i

ja znalazlem cos takiego:

FOR /R "install\" %%G in (.) DO (

 Pushd %%G

 Echo now in %%G

 Popd )

ale:

  1. pierwszym elementem wyswietlanej listy jest folder glowny /install/. - nie potrzebuje

  2. wyswietla takze podfoldery (cale drzewo) np /install/folder1/podfolder1/

chcialbym aby wyswietlil tylko foldery glowne w folderze /install/

Więc użyj to co ci podałem, dokładnie spełnia twoje oczekiwania.

Jedynie trzeba przejść do tego folderu używając cd lub zmienić maskę na (install*)

FOR /D %%F in (install\*) DO (

	PUSHD

	ECHO now in %%F

	POPD

)

Echo "back home"

rzeczywiście to działa, ale po co stosuje się PUSHD i POPD w tej pętli drugi problem tworzę plik nazwa.sii ( S ilent I nstalation I ni) np dla Avasta:

[NAME]

   Avast Free Antyvirus

[VERSION]

   7.0.1474

[OS]

   XP

[ORDER]

   setup.exe /S

jak bedzie wyglądać procedura dla CMD, która po wykonaniu:

ECHO Instaluję program: %NAME v%VERSION dla systemu %OS

RUN %ORDER

wykona instalację i wyświetli tekst:

Instaluję program: Avast Free Antyvirus v7.0.1474 dla systemu XP

nie wiem, czy jano się wyraziłem?

Zmień format pliku na:

NAME= Avast Free Antyvirus

VERSION=7.0.1474

OS=XP

ORDER=setup.exe /S

Jak nie to wyłuskanie tego w ten sposób jak chcesz zajmie ci dużo czasu i nerwów.

Przewidując kolejne pytanie:

FOR /F “tokens=1,* delims==” %%i in (tmp.sii) do set %%i=%%j

echo %NAME%

echo %VERSION%

echo %OS%

echo %ORDER%

myślałem ze uda się to jakąś prosta pętlą

FOR /f ....

i wszystko co pomiędzy nawiasami kwadratowymi to nazwa zmiennej, a linijka pod spodem to wartość tej zmiennej :frowning: bo np przyjdzie mi do głowy dodać zmienną [LANG] lub inne wtedy nie ma problemu pozmieniac – Dodane 18.01.2013 (Pt) 11:50 – cos mi nie gra niby wszystko ok ale… mam kod:

FOR /D %%F in (install\*) DO (

	PUSHD

		FOR /F "tokens=1,* delims==" %%G IN (%%F\tmp.sii) DO SET %%G=%%H

		ECHO instaluje %VERSION%

	POPD

)

którego efektem jest pusty tekst instaluje za pomoca ECHO sprawdzilem zmienne %%G i %%H i sa dobrze wyciagniete z pliku, ale pewnie cos nie gra z funkcja SET bo zmienne sa puste :frowning: jedynie zmienna %OS% wyswietla: Windows_NTDodane 25.01.2013 (Pt) 12:33 – znalazlem blad:

ECHO instaluje !VERSION!