。batを初めて記述しようとしています。
スクリプトを使用して.msiをインストールしようとしていますが、現在、それをダブルクリックして手動でインストールしています。
からのパス:d:/installed sw/$folder/.msi
へのパス:D:/program files/app/
$folder
は、現在の日付までに作成されたフォルダーで提供される新しいmsiをインストールするため、毎回異なることを意味します。
私が試しているスクリプトは次のとおりです。
@echo off
Title Host: Installing Updates on %computername%
echo %computername%
set server=\\SERVERNAME or PATH\msifolder
:select
cls
echo Select one of the Following MSI Install Folders for installation task.
echo.
dir %server% /A:D /B
SET /P MSI=Please enter the MSI Folder to install:
SET source=%server%\%MSI%
echo Selected Installation %MSI%
echo.
echo.
:verify
ECHO Is This Correct?
echo.
echo.
ECHO 0: ABORT INSTALL
ECHO 1: YES
ECHO 2: NO,RE-SELECT
SET /p choice=Select YES, NO or ABORT? [0,1,2]:
if /i [%choice%]==[0] endlocal&goto end
if [%choice%]==[] goto BCurrentlocal
if [%choice%]==[1] goto yes
if [%choice%]==[2] goto no
endlocal
:no
goto select
:yes
set FILENAME=%MSI%
call %source%\%FILENAME%.msi
echo beginning %MSI% installation
pause
echo Exiting Install Script....
PING -n 4 127.0.0.1 >nul
exit
に沿って set server
パスをに追加しています。
SET /P MSI
は、fromからのパスです。
ただし、機能していません。
誰が私がやっている間違いを私に導くことができますか?
通常のMSIファイルをサイレントインストールする:
msiexec.exe /i c:\setup.msi /QN /L*V "C:\Temp\msilog.log"
簡単な説明:
/L*V "C:\Temp\msilog.log"= verbose logging
/QN = run completely silently
/i = run install sequence
msiexec.exeコマンドライン は、さまざまなオプションをサポートする拡張機能です。同じコマンドラインインターフェイスの 別の概要 です。これは 注釈付きバージョン (壊れていた、ウェイバックマシンを介して復活)です。
バッチファイルを大幅に短くするfor loops などのコンストラクトを使用して、Windows Updateでここに示すようにすることもできます。
セットアップ時にチェックする必要があるチェックボックスがある場合は、チェックボックスに適切なPUBLIC PROPERTIESを付けて設定する必要があります。次のようなコマンドライン:
msiexec.exe /i c:\setup.msi /QN /L*V "C:\Temp\msilog.log" STARTAPP=1 SHOWHELP=Yes
これらのプロパティは、MSIごとに異なります。これらはverbose log fileを介して、または Orcaまたは別の適切なツール でMSIを開くことで見つけることができます。プロパティ名は、ダイアログコントロールセクションまたはプロパティテーブルで確認する必要があります。セットアップを実行し、最初に詳細なログファイルを作成してから、「プロパティを設定しています...」というメッセージをログで検索してから、プロパティ名を確認します。次に、このプロパティにログファイルの値をコマンドラインに追加します。
また、トランスフォームを使用して、コマンドラインパラメーターの設定を超えてMSIをカスタマイズする方法もご覧ください。 MSIファイルをより有効に使用する方法
トピックから外れているように見えるかもしれませんが、ERRORLEVELを確認する手間はありません。あなたの提案を使用したとき、MSIのインストール直後にエラーをチェックしようとしました。意図的に失敗させ、バッチファイルではmsiexecがエラーを設定していないように見えますが、コマンドラインではすべてがうまく機能することに気付きました。そこに別のものを試してみました
何も機能せず、主に私を悩ますのは、コマンドラインで機能することです。
バッチファイルは次のとおりです。
@echo off
Title Host: Installing updates on %computername%
echo %computername%
set Server=\\SERVERNAME or PATH\msifolder
:select
cls
echo Select one of the following MSI install folders for installation task.
echo.
dir "%Server%" /AD /ON /B
echo.
set /P "MSI=Please enter the MSI folder to install: "
set "Package=%Server%\%MSI%\%MSI%.msi"
if not exist "%Package%" (
echo.
echo The entered folder/MSI file does not exist ^(typing mistake^).
echo.
setlocal EnableDelayedExpansion
set /P "Retry=Try again [Y/N]: "
if /I "!Retry!"=="Y" endlocal & goto select
endlocal
goto :EOF
)
echo.
echo Selected installation: %MSI%
echo.
echo.
:verify
echo Is This Correct?
echo.
echo.
echo 0: ABORT INSTALL
echo 1: YES
echo 2: NO, RE-SELECT
echo.
set /p "choice=Select YES, NO or ABORT? [0,1,2]: "
if [%choice%]==[0] goto :EOF
if [%choice%]==[1] goto yes
goto select
:yes
echo.
echo Running %MSI% installation ...
start "Install MSI" /wait "%SystemRoot%\system32\msiexec.exe" /i /quiet "%Package%"
コマンドプロンプトウィンドウにhelp cmd
またはcmd /?
のいずれかを入力すると、最終ページ出力にリストされる文字は、バッチファイルで特別な意味を持ちます。これらの文字を文字どおりに解釈する必要がある文字列でも、括弧と角括弧が使用されています。したがって、上記のコードに見られるように、文字列を二重引用符で囲むか、文字^
でこれらの文字をエスケープする必要があります。そうしないと、構文エラーによりコマンドラインインタープリターがバッチ実行を終了します。
また、拡張子がMSIのファイルを呼び出すことはできません。 * .msiファイルは実行可能ファイルではありません。 MSIファイルをダブルクリックすると、Windowsはレジストリ内で、どのアプリケーションがこのファイル拡張子に関連付けられてアクションを開くかを調べます。そして、使用するアプリケーションは、MSIパッケージ内にアプリケーションをインストールするためのmsiexec
とコマンドラインオプション/i
です。
msiexec.exe /?
を実行して、GUIウィンドウで使用可能なオプションを取得するか、 Msiexec(コマンドラインオプション) を確認します。
サイレントインストールの必須オプション/quiet
に既に/i
を追加しました。
上記のバッチコードでは、コマンドstart
をオプション/wait
とともに使用して、Windowsアプリケーションmsiexec.exe
を起動し、インストールが完了する(または中止される)までバッチファイルの実行を保留します。