最近公司需要对外开源一个产品,为了让外界用户尽量简单的使用该产品。打算将依赖软件采用一个脚本的方式进行快速安装。

脚本编写

这里安装的软件包括:docker, vcxsrv, nodejs 及 使用npm安装adbkit

:: 将
@echo off
:: 设置窗口大小
@mode con lines=40 cols=100
:: 设置窗口背景颜色
color AF
:: 设置标题
title "auto install tool"
:: 打印信息 
echo "install begin .....">log.txt

:: docker
echo.
echo docker install ......
:: wait 参数表示需要等上一个软件安装之后再进行一个软件安装,因为有时候需要依赖前一个软件,所以这个功能很有用,比如安装adbkit需要先安装nodejs,然后使用nodejs的npm安装adbkit
start /wait .\Docker_Desktop_Installer.exe
:: 根据打印日志的级别判断是否安装成功并答应相应的信息
if %errorlevel% == 0 (echo docker install successful) else echo docker install failed

:: vcxsrv
echo.
echo vcxsrv install ......
start /wait .\vcxsrv-64.1.20.8.1.installer.exe
if %errorlevel% == 0 (echo vcxsrv install successful) else echo vcxsrv install failed

:: nodejs
echo.
echo nodejs install ......
:: 这里安装msi文件
start /wait .\node-v14.15.0-x64.msi /l*v log.txt
if %errorlevel% == 0 (echo nodejs install successful) else echo nodejs install failed

:: adbkit
echo adbkit install ......
npm install i -g adbkit
if %errorlevel% == 0 (echo adbkit install successful) else echo adbkit install failed

echo "install finished">log.txt
pause

碰到的问题

1. Q:安装包的路径被截断,提示安装失败
   A:安装包路径中不要出现空格,否则识别会出错。 windows的脚本挺坑的
2. Q:安装nodejs之后,在使用npm安装adbkit时提示无法识别npm命令
   A: 安装adbkit是依赖前面安装的nodejs,而开启当前终端时是没有配置nodejs的环境变量的,即使通过当前安装脚本重新代开一个终端执行npm命令也不行,因为在当前bat脚本中打开终端属于子进程,不会去加载环境变量。解决方案时,安装完nodejs之后,在写一个使用npm安装adbkit的脚本单独运行。
4. 

其他常见操作汇总

1. 查看环境变量
	set
	
2. 设置系统环境变量
	set PATH = %PATH%;C:\Program Files\nodejs\node_modules\npm

3. 调用其他bat文件
	start install_adbkit.bat   :: 或
	@call install_adbkit.bat

4. 从C盘切换到D盘目录
	d:    :: 先到D盘
	cd d:\you\file\directory

5. 获取执行命令的返回值
	:: 先通过adb devices获取设备序列好,然后将该值用于adbkit的输入
	for /F %%i in ('adb devices') do ( set adb_device=%%i)
	echo detect phone deviceid=%adb_device%
	start /b adbkit usb-device-to-tcp -p 7788 %adb_device%

6. 查看进程信息
	:: 列举当前的进程、进程路径、命令行、进程ID、父进程ID、线程数,内存使用
	wmic process get name,executablepath,commandline,processid,parentprocessid,threadcount,workingsetsize/value
	
	:: 查询可用属性 : processid,caption,commandline
	wmic process get /? 
	
	:: /value显示对应列表
	wmic process  get caption,commandline /value
	
	:: 根据caption查询进程信息
	wmic process where caption="update.exe" get processid,caption,commandline /value

参考文献

http://www.360doc.com/content/19/1007/14/10519289_865323566.shtml
https://blog.csdn.net/WannaHaha/article/details/106289435
http://www.360doc.com/content/13/0311/20/1865135_270860611.shtml
https://stackoverrun.com/cn/q/6918426

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐