2016-10-30 4 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를 위해) of wireshark는 프로그램이 이미 프로그램 파일에 있는지 여부를 확인하는 데 사용됩니다.)배치 스크립트는

메신저 각 프로그램의 레지스트리를 가져 오는 대신 커다란 프로그램을 사용자 지정 Windows 이미지에 적용하기위한 기초 자료로 사용합니다.

주된 문제는 cmd로 돌아가는 오류입니다. 산술이 적용되지 않은 문제가 있었는데, var에서 빼낸 다음 에코가 반영되지 않았습니다.

누군가가 설치 섹션에서 사용 된 루프에 대한 대안 솔루션을 갖고 있다면 감사하겠습니다.

이고 잉크는/s 자동 매개 변수를 갖습니다.

나는 설치 후에도 너무 깨끗하게하기 위해 옵션을 추가 할 예정이었습니다.

+0

세 파일과 그 목적을 설명해야 할 수 있습니다.현재 디렉터리에 .loc 파일의 이름이 있는지 확인하는 것이 설치되어 있는지 확인하지 않는 것 같습니다. – Compo

+0

코드 블록 안에 있습니다. 지연된 확장을 사용해야합니다. – Squashman

답변

0

이 즉, 비슷한 일을 모두 세 개의 파일이 존재하는지 확인하지 않는 경우 관련 .LNK 파일을 시작 존재하지 않는 .loc 내부의 첫 번째 줄과 같이 작성 (백 슬래시를 후행없이) 경로, , . 한 .exe가의 .LNK를하지 실행되기 때문에 당신이의 두 번째 줄에 스위치를 넣어야 할 수 있도록 대기가하는 .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 

는 나도 몰라 .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를 사용하여 그것의 외모에서

,

사람이 여전히이 창에 사용자 정의 이미지를 만들 때 필요한 노력을 완화하기 위해이 프로그램의 사용을 궁금해하는 경우, 그래서 당신은 메뉴 아이콘, 드라이버 등

과 .wa 함께 그들 모두를 추가하거나 승리 툴킷과 같은 프로그램의 다른는 등록 키를 잡는 것보다

아니라 시작 : 새 운영 체제를 설치 한 후 자동 소프트웨어를 설치할 수 있습니다 .

두 가지 옵션을 비교하는 것만 큼, 일부 소프트웨어의 경우 이와 비슷합니다.

+0

미래의 방문객에게 잠재적으로 도움이 될 수 있도록 올바른 대답을 표시해 주시기 바랍니다. – Compo

관련 문제