2016-10-30 6 views
1
@echo off 

Setlocal enableextensions EnableDelayedExpansion 
REM %%~pI  - expands %I to a path only 
REM %%~nI  - expands %I to a file name only 
REM %%~xI  - expands %I to a file extension only 
REM %%~fI  - expands %I to a fully qualified path name 
cls 
set "var=" 
set /a total=0 

set setupLocation=%SYSTEMDRIVE%\setup\ 
set installer=*.lnk 


for %%s in ("%setupLocation%%installer%") do (
    set /a total+=1 
) 

echo. 
echo %total% Programs to be installed: 
echo. 
set /a count=0 

for %%I in ("%setupLocation%%installer%") do (

set currentInstall=%%~nI 
echo %currentInstall% 

     for %%s in ("%setupLocation%*.exe") do (
     SET var=%%s 
     SET var|FINDSTR /b "var="|FINDSTR /i %currentInstall% >nul 
     IF ERRORLEVEL 1 (echo.>nul) ELSE (for /f "delims=" %%i in ('echo %%s') do set Program[%count%]=%%~nI) 

     ) 

     for %%s in ("%setupLocation%*.lnk") do (
      SET var=%%s 
      SET var|FINDSTR /b "var="|FINDSTR /i %currentInstall% >nul 
      IF ERRORLEVEL 1 (echo.>nul) ELSE (for /f "delims=" %%i in ('echo %%s') do set File[%count%]=%%i) 
      echo !File[%count%]! 

     ) 


     for %%s in ("%setupLocation%*.loc") do (
      SET var=%%s 
      SET var|FINDSTR /b "var="|FINDSTR /i %currentInstall% >nul 
      IF ERRORLEVEL 1 (echo.>nul) ELSE (for /f "delims=" %%i in ('type %%s') do set Dir[%count%]=%%i) 
      echo !Dir[%count%]! 

     ) 
set /a count=%count%+1 
echo %count% 

) 
echo. 
pause 




for /F "tokens=2 delims==" %%s in ('set Program[') do (
echo %%s 
set /a counter+=1 
) 

echo test %counter% 



:loop 
cls 

if %counter% EQU 0 goto end 


for /l %%n in (0,1,%counter%) do (
    if exist !Dir[%%n]! (
     echo !File[%%n]! Already Installed. 
     SET /A counter=%counter%-1 
     pause 
     if %counter% EQU 0 goto end 
     echo %counter% 
    ) else (

     echo. 
     echo Installing !Program[%%n]! & echo. 
     echo ******************************************************************************* & echo. 

     echo Install Location: !Dir[%%n]! & echo. 
     echo  Setup Location: !File[%%n]! & echo. 

     start "" /w /b !File[%%n]! 

    ) 
    SET /A counter=%counter%-1 
    echo %counter% Programs to be installed. 
) 


    goto loop 

:end  
echo Everything already installed. 
pause 

はそれがルートフォルダのCを確認します(バックエラーアウトは、CMDに)プログラムが既にプログラムファイル内に存在するかどうかを確認するのに使用されるwiresharkの)。バッチスクリプトは、

imこれは、プログラムごとにレジストリを取得するのではなく、大量のプログラムをカスタムWindowsイメージに適用するためのベースとして使用します。

主な問題は、cmdに戻ってエラーが発生しました。算術が適用されなかった問題が発生しました。varから引き算すると、次のエコーは反映されませんでした。

誰かが、インストールセクションで使用されているループの代替ソリューションを持っていれば、それはわかります。

であり、インクは/ sサイレントパラメータを有する。

私はそれもインストール後にそれ自身の後にクリーンアップするためのオプションを追加しようとしていた。

+0

3つのファイルとその目的を説明する必要がある場合があります。現在のディレクトリに.locファイルの名前が存在するかどうかのチェックだけがインストールされているかどうかは確認されません。 – Compo

+0

コードブロック内にあります。遅延拡張を使用する必要があります。 – Squashman

答えて

0

3つのファイルがすべて存在することを確認してください。(末尾にバックスラッシュが付きません)は、.loc内の最初の行として記述されていません。関連付けられた.lnkファイル。

@Echo Off 
SetLocal EnableExtensions EnableDelayedExpansion 

Set "SetUpLocation=%SYSTEMDRIVE%\Setup" 

PushD "%SetUpLocation%"||Exit/B 

ClS 
Set "i=0" 
For %%s In (*.loc) Do (If Exist "%%~ns.lnk" (If Exist "%%~ns.exe" (
    Set/P IL=<"%%s" 
    If Exist "!IL!\" (Echo=Program %%~ns already installed) Else (
     Echo=Installing %%~ns& Echo. 
     Echo ******************************************************************************* 
     Echo.& Echo Install Location : !IL!& Echo. 
     Echo Setup Location : %SetUpLocation%& Echo. 
     (Start "" /W /B "%%~ns.lnk")&&Set/A i+=1)))) 
Echo. 
Echo %i% Programs were installed: 
Echo. 

PopD 
Timeout/T -1 >Nul 

.EXEが.LNK、ないで実行されますので、待ち時間が.LNKファイルで動作します場合、私は見当がつかないので、あなたは、の2行目にスイッチを配置する必要があり.locファイルを削除し、.lnkファイルを削除してから、読み取りスイッチを使用して直接.exeを実行します。

@Echo Off 
SetLocal EnableExtensions EnableDelayedExpansion 

Set "SetUpLocation=%SYSTEMDRIVE%\Setup" 

PushD "%SetUpLocation%"||Exit/B 

ClS 
Set "i=0" 
For %%s In (*.loc) Do (If Exist "%%~ns.exe" (
    (For %%I In (IL ES) Do (Set "%%I="&Set/P "%%I="))<"%%s" 
    If Exist "!IL!\" (Echo=Program %%~ns already installed) Else (
     Echo=Installing %%~ns& Echo. 
     Echo ******************************************************************************* 
     Echo.& Echo Install Location : !IL!& Echo. 
     Echo Setup Location : %SetUpLocation%& Echo. 
     (Start "" /W /B "%%~ns.exe" !ES!)&&Set/A i+=1))) 
Echo. 
Echo %i% Programs were installed: 
Echo. 

PopD 
Timeout/T -1 >Nul 
+0

また、私はpushDコマンドについて少し研究をしましたが、それはなぜ私がcmdにクラッシュしているかのように思われます。他のディレクトリでも動作し、バッチファイルを実行し続けることができます。 – c0ldtrain

0

ありがとうございます!はい、あなたが提供してくれた例は完璧です!私は必要なものを正確に行います。

あなたのコードも大好きです。私は冗長な行をたくさん持ち、読者の理解を向上させるために変数に渡すことにもっと慣れています。

しかし、この使用の場合、これは問題ありません。

おそらく、一致するファイルをチェックするオプションを除外して、余分な機能を追加しました。

とその様子から、スタート作品での.lnkを使用して、誰もが、まだこのプログラムの使用を疑問に思っている場合

、それはWindows上でカスタムイメージを作成するときに必要な労力を軽減するので、あなたメニューアイコン、ドライバーなど

と.waで一緒にそれらすべてを追加したり、勝利のツールキットのようなプログラムのために他を、REGキーをつかんより

むしろ開始:あなたは新しいOSをインストールした後に自動でソフトウェアをインストールすることができます。

このように、2つのオプションを比較するだけで、一部のソフトウェアではこのようになります。

+0

将来の訪問者が潜在的に利益を得ることができるように、私の答えを正しいものとしてマークしてください。 – Compo

関連する問題