前提:需要了解一些基础cmd命令
问题描述:
由于经常帮朋友的新电脑安装软件,在这种需要在新系统下配置软件环境的前提下,编写了一个自动安装的脚本程序,可以通过简单的输入快速静默安装软件(尝试过softprop等类似软件,但由于此类软件无法调用64位cmd导致在64位系统中添加注册表信息会出错,因此才开始尝试直接利用cmd脚本来实现批量安装功能)
进入后会提示安装总安装路径以及选择可用的mac地址(例如ansys就需要mac信息来配置许可证),运行截图如下:
cmd自动安装软件
提示:选择mac后就会进入到可用软件列表选项中,此时会在用户的桌面输出一个日志文件,内部包含一些安装信息,方便用户检查是否安装出错
如需要安装多个软件,则可输入多个代表数字,中间用空格隔开即可
用户可以在软件安装的bat文件中调用输出加载日志中的全局函数,以便可以把软件安装到一个总路径下,以及写入一些公共信息。
至于每个软件所需要的bat文件,用户可以通过网络查询相应的静默安装参数后编写到对应的bat文件中
main.bat内容如下:
@echo off
setlocal enabledelayedexpansion
rem ################## 加载插件 ##################
:: 配置plugin
:: 设置插件路径
set plugin=plugin\
:: 7Z解压工具
:: 配置调用程序
set unpack=%~dp0%plugin%7Z\7Z.exe
:: 设置解压缓存目录:x:\xx\
set unpack_path=C:\temp\
:: WCE虚拟光驱工具
:: 配置调用程序
set VD=%~dp0%plugin%WinCDEmu\PortableWinCDEmu-4.0.exe
rem ################ 加载文件夹路径 ################
:: 获取桌面地址
set desk = ""
for /f "tokens=2,*" %%i in ('reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "Desktop"') do (
set desk=%%j
)
:: 获取用户文档地址
set docu = ""
for /f "tokens=2,*" %%i in ('reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "Personal"') do (
set docu=%%j
)
:: 设置安装日志
set log="%desk%\安装日志.log"
:selet_path
echo -------------------------------------------------
echo [1] 选择输入安装总路径
echo [2] 手动输入安装总路径
echo -------------------------------------------------
choice /c:12 /m:"选择输入方式:"
if %errorlevel%==1 (goto select_folder)
if %errorlevel%==2 (goto self_set_install_path)
:self_set_install_path
:: 手动设置安装目录:x:\xx\
set /p install_path="输入地址(x:\xx):"
set install_path=%install_path%\
goto get_mac_address
:select_folder
:: 生成获取选择路径的vbs
(echo Set sa=CreateObject^("Shell.Application"^)
echo Set objfolder=sa.BrowseForFolder^(0, "选择安装总路径:", 0, ^&H00000000^)
echo If objfolder Is Nothing Then
echo WSH.echo "Cancelled"
echo WSH.Quit
echo End If
echo Set objitem=objfolder.Self
echo WSH.echo objitem.Path)>"%temp%\select_folder.vbs"
for /f "delims=" %%a in ('cscript -nologo -e:vbscript "%temp%\select_folder.vbs"') do (
set "install_path=%%a"
)
:: 清理临时文件
del "%tmp%\select_folder.vbs"
if "%install_path%"=="Cancelled" (
echo 文件夹选择被取消或失败
goto select_folder
) else (
set install_path=%install_path%\
goto get_mac_address
)
rem ################ 获取用户mac地址 ################
:get_mac_address
echo %install_path%
1
:: 初始化计数器
set count=0
:: 获取并显示所有MAC地址
echo 以下是您的网络接口MAC地址列表:
echo -------------------------------------------------
for /f "tokens=1,3 delims=," %%a in ('getmac /v /NH /fo csv') do (
set /a count+=1
echo [!count!] %%a - %%b
set "mac[!count!]=%%b"
)
echo -------------------------------------------------
:: 提示选择一个MAC地址
echo.
echo 请选择一个MAC地址(输入对应的数字):
set /p choice="输入选择: "
:: 显示用户选择的MAC地址
if defined mac[%choice%] (
echo.
echo 您选择的MAC地址是:!mac[%choice%]!
) else (
echo.
echo 无效的选择,请重新选择。
goto getmacaddress
)
:: 格式化mac地址
set str=!mac[%choice%]!
set str=%str:"=%
set hostid=%str:-=%
echo %hostid%
rem ################## 输出加载日志 ##################
:: 安装目录:%install_path%,x:\xx\
:: 用户桌面位置:%desk%,x:\xx
:: 用户文档位置:%docu%,x:\xx
:: 解压工具:%unpack%
:: 解压路径:%unpack_path%,x:\xx\
:: 解压命令 %unpack% x <解压资源路径> -o"<解压路径>"
:: 虚拟光驱工具:%VD%
:: 加载光驱:%VD% <image file> [<drive letter>] [/wait] - mount image file
:: 卸载光驱工具:%VD% /unmount <drive letter>: - unmount image file
:: 安装日志:%log%,x:xxxx.log
:: hostid: XXXXXXXXXXXX (格式化后的mac地址)
echo %time% 启动程序 >>%log%
echo ------------------------------------------------- >>%log%
echo 加载用户参数如下: >> %log%
echo 安装目录:%install_path% >> %log%
echo 用户桌面位置:%desk% >> %log%
echo 用户文档位置:%docu% >> %log%
echo 用户主机mac地址:%hostid% >> %log%
echo ------------------------------------------------- >>%log%
rem ################ 加载软件列表 ################
:getsoftlist
setlocal
:: 初始化计数器
set count=0
:: 获取软件列表
echo 以下是当前软件列表:
echo -------------------------------------------------
for /f "tokens=1,2 delims=," %%a in (.\软件列表.txt) do (
set /a count+=1
echo [!count!] %%a
set "softname[!count!]=%%a"
set "softcmd[!count!]=%%b"
)
echo 请选择需要安装的软件(输入对应的数字):
set /p choice="输入选择: "
:: 执行选择安装的软件
for %%i in (%choice%) do (
echo 正在安装 !softname[%%i]!
call !softcmd[%%i]!
)
endlocal
软件列表.txt内容如下:
adraw,%~dp0edraw\edraw.bat
potplayer,%~dp0potplayer\PotPlayer.bat
adraw14,EdrawMax.14\edraw.bat
|