吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2454|回复: 10
收起左侧

[Windows] 批量安装软件的脚本

[复制链接]
shitou6237 发表于 2024-10-6 17:27
前提:需要了解一些基础cmd命令

问题描述:
由于经常帮朋友的新电脑安装软件,在这种需要在新系统下配置软件环境的前提下,编写了一个自动安装的脚本程序,可以通过简单的输入快速静默安装软件(尝试过softprop等类似软件,但由于此类软件无法调用64位cmd导致在64位系统中添加注册表信息会出错,因此才开始尝试直接利用cmd脚本来实现批量安装功能)
进入后会提示安装总安装路径以及选择可用的mac地址(例如ansys就需要mac信息来配置许可证),运行截图如下:

cmd自动安装软件

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


发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| shitou6237 发表于 2024-10-10 09:37
Listentomusic 发表于 2024-10-9 14:12
非常感谢分享,楼主大大我也是经常安装软件。有一个想法就是我想把所有需要安装的软件都下载到一个文件夹。 ...

不好意思,不太了解你用的软件分发渠道是啥?帖子中这个脚本最初时为了给ansys、matlab、ad这种比较耗时的工业软件编写的,比较常见的办公软件如果支持静默参数的话也可以用这个脚本,但是要让它自己更新软件安装包是暂时没考虑到的,容我先尝试了解下。这里建议如果是比较常见的办公软件,或许可以在安装之后,通过某个软件商店来维持更新。如果是某些特定版本的工业软件,还是需要个人到网络上搜集的。
Listentomusic 发表于 2024-10-9 14:12
非常感谢分享,楼主大大我也是经常安装软件。有一个想法就是我想把所有需要安装的软件都下载到一个文件夹。然后每隔一段时间对这些软件进行自动更新这该怎么实现呢?
 楼主| shitou6237 发表于 2024-10-6 17:29
推荐大家使用WinCDEmu镜像挂载软件,理由:可以通过cmd命令挂载卸载,可以指定挂载盘符,
zqyjh 发表于 2024-10-9 15:42
感谢大佬分享,收藏收藏
dufu 发表于 2024-10-10 08:53
感谢分享
Listentomusic 发表于 2024-10-10 13:30
shitou6237 发表于 2024-10-10 09:37
不好意思,不太了解你用的软件分发渠道是啥?帖子中这个脚本最初时为了给ansys、matlab、ad这种比较耗时 ...

了解非常感谢,就是常用的办公软件
buyaokongqi 发表于 2024-10-16 15:48
谢谢大佬,我也是经常给别人装系统,然后装软件,然后优化系统,调整qq微信的缓存,然后关闭360安全卫士的一些广告等等,这样有没有自动的
 楼主| shitou6237 发表于 2024-10-18 09:19
buyaokongqi 发表于 2024-10-16 15:48
谢谢大佬,我也是经常给别人装系统,然后装软件,然后优化系统,调整qq微信的缓存,然后关闭360安全卫士的 ...

您好,我记的软媒魔方的小组件设置大师可以批量修改用户文件位置设置,杀毒软件我用的火绒,对于360的设置不是很了解,不好意思
hujun306 发表于 2024-10-23 18:47
了解非常感谢
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-23 10:16

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表