【发布时间】:2016-10-30 06:52:14
【问题描述】:
@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 个文件,分别是:
nmap.lnk
nmap.exe
nmap.loc
wireshark.lnk
wireshark.exe
wireshark.loc
(包含wireshark的默认安装目录,用于检查程序是否已经存在于程序文件目录中。)
我以此为基础将大量程序整合到自定义 Windows 映像中,而不是获取每个程序的注册表。
主要问题是它返回到 cmd 时出错,我遇到了算术没有应用的问题,因为我从 var 中减去,下一个回显没有反映这一点。
如果有人对安装部分中使用的循环有替代解决方案,将不胜感激。
并且墨水将具有 /s 静默参数。
我打算在安装后添加它的选项,以便在安装后自行清理。
【问题讨论】:
-
您可能需要解释您的三个文件及其用途。似乎没有检查是否安装了任何东西,只是检查当前目录中是否存在 .loc 文件的名称。
-
您在代码块中。您需要使用延迟扩展。
标签: batch-file cmd windows-7