2016-10-30 7 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: \ Setup \ 3 файлов, являются:Пакетный скрипт, который автоматически выполняет автоматической установки (ошибки обратно к CMD)

nmap.lnk 
nmap.exe 
nmap.loc 

wireshark.lnk 
wireshark.exe 
wireshark.loc 

(содержащий установки по умолчанию реж of wirehark, используемый для проверки того, присутствует ли программа в директории программных файлов.)

im Использование этого в качестве основы для распространения большего количества программ в пользовательские образы окон, а не для получения реестра для каждой программы.

Основная проблема, связанная с тем, что ошибки возвращаются к cmd, у меня возникли проблемы, когда арифметика не применялась, так как я вычитал из var, следующее эхо не отражало это.

Если у кого есть альтернативное решение для цикла, используемого в разделе установки, которое было бы оценено.

и чернила будут иметь параметры/s без звука.

Я собирался добавить к нему опцию, чтобы очистить после себя после установки тоже.

+0

Возможно, вам потребуется объяснить ваши три файла и их цель.Кажется, нет проверки, если что-то установлено только для проверки наличия имени .loc-файла в текущем каталоге. – Compo

+0

Вы находитесь внутри блока кода. Вам нужно использовать задержанное расширение. – Squashman

ответ

0

Это не похоже на то, что есть все три файла, и если путь, (без обратной обратной косой черты), написанный как первая строка внутри .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 

Я понятия не имею, если ждать будет работать с .lnk файла, так как .exe будет работать, а не в .LNK, так что вы, возможно, придется поставить выключатели на второй линии .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 с начала работ,

если кто-то интересно использование этой программы до сих пор, это смягчать усилия, необходимые при создании пользовательского образа на окнах, так что вы может автоматически установить программное обеспечение после установки новой ОС:

, а не захватывая ключи REG, начать иконки меню, драйвер и т.д.

и добавляющие их всех вместе в .wa или другие программы, такие как выиграть набор инструментов ,

Более того, просто сравнение двух вариантов для некоторого программного обеспечения, например.

+0

Не могли бы вы поэтому отметить мой ответ так правильно, что будущие посетители могут потенциально извлечь выгоду. – Compo