标题: [其他] [已解决] 请教批处理如何将多台设备得序列号,model号,系统版本打印后进行左对齐? [打印本页]
作者: dos-a 时间: 2023-1-16 14:50 标题: [已解决] 请教批处理如何将多台设备得序列号,model号,系统版本打印后进行左对齐?
本帖最后由 dos-a 于 2023-4-9 15:25 编辑
如:
[1] 系统版本: 鸿蒙 2.0.0 model: VRD-W10 序列号: RCJ6R20A22000022
[2] 系统版本: andorid 12 model: 22021211RC 序列号: ad8670af
[3] 系统版本: 鸿蒙 2.0.022 model: VRD-W10 序列号: RCJ6R20A22000022
[4] 系统版本: andorid 12000 model: 22021211RC 序列号: ad8670af
[5] 系统版本: 鸿蒙 2.0.0.33 model: VRD-W10 序列号: RCJ6R20A22000022
[6] 系统版本: andorid 12 model: 22021211RC 序列号: ad8670af
这种打印后会因为使用得tab导致与上行显示结果不一致
如果我想让他们每列 左对齐我该怎么办?
如下是原bat:- :a
- cls
- @echo off
- setlocal enabledelayedexpansion
-
- rem 输出所有设备标识
- echo ╔═ ═╗
- echo 已连接设备
- echo ╔════════════════════════════════ ╚═ ═╝ ═════════════════════════════╗
- echo,
- set "cnt=0"
- for /f "skip=1 tokens=1 delims= " %%a in ('adb devices') do (
- REM 获取设备model号
- for /f "delims=" %%r in ('adb -s %%a shell getprop ro.product.model') do (
- for /f "delims=" %%x in ("%%r") do (
- set "f=%%x"
- )
- )
- set "cv="
- for /f "delims=" %%c in ('adb -s %%a shell getprop hw_sc.build.platform.version') do (
- for /f "delims=" %%x in ("%%c") do (
- set "cv=%%x"
- )
- )
- if "!cv!"=="" (
- REM 安卓
- for /f "delims=" %%s in ('adb -s %%a shell getprop ro.build.version.release') do (
- for /f "delims=" %%x in ("%%s") do (
- set "sv=%%x"
- )
- )
- set "version=!sv!"
- set "system=andorid"
- ) else (
- REM 鸿蒙
- set "version=!cv!"
- set "system=HarmonyOS"
- )
- set /a cnt+=1
- echo [!cnt!] 系统版本: !system! !version! model: !f! 序列号: %%a
- echo,
- )
- echo ╚══════════════════════════════════════════════════════════════════════════════════╝
- echo.
- pause
- goto a
复制代码
运行结果:
╔═ ═╗
已连接设备
╔════════════════════════════════ ╚═ ═╝ ═════════════════════════════╗
[1] 系统版本: 鸿蒙 2.0.0 model: VRD-W10 序列号: RCJ6R20A22000022
[2] 系统版本: andorid 12 model: 22021211RC 序列号: ad8670af
╚══════════════════════════════════════════════════════════════════════════════════╝
请按任意键继续. . .
这个是Batcher大佬在他的:
http://www.bathome.net/viewthread.php?tid=3774&from=favorites
中提到得左对齐思路
这部分是我修改后得但是结果不太行- @echo off
- :aap
- setlocal enabledelayedexpansion
- rem 输出所有设备标识
- echo ╔═ ═╗
- echo 已连接设备
- echo ╔════════════════════════════════ ╚═ ═╝ ═════════════════════════════╗
- echo,
- set "cnt=0"
- for /f "skip=1 tokens=1 delims= " %%a in ('adb devices') do (
- REM 获取设备model号
- for /f "delims=" %%r in ('adb -s %%a shell getprop ro.product.model') do (
- for /f "delims=" %%x in ("%%r") do (
- set "f=%%x"
- )
- )
- set "cv="
- for /f "delims=" %%c in ('adb -s %%a shell getprop hw_sc.build.platform.version') do (
- for /f "delims=" %%x in ("%%c") do (
- set "cv=%%x"
- )
- )
- if "!cv!"=="" (
- REM 安卓
- for /f "delims=" %%s in ('adb -s %%a shell getprop ro.build.version.release') do (
- for /f "delims=" %%x in ("%%s") do (
- set "sv=%%x"
- )
- )
- set "version=!sv!"
- set "system=andorid"
- ) else (
- REM 鸿蒙
- set "version=!cv!"
- set "system=HarmonyOS"
- )
- set /a cnt+=1
- set "ct= [!cnt!] "
- set "xb=系统版本:!system!!version!"
- set "md=model:!f!"
- set "xl=序列号:%%a"
- for /f "delims=" %%s in ("!ct! !xb! !md! !xl!") do (
- set /a n+=1&set /p=^%%s <nul
- if !n!==4 set n=0&echo .
- )
- ::echo [!cnt!] 系统版本: !system! !version! model: !f! 序列号: %%a
- echo,
- )
- echo ╚══════════════════════════════════════════════════════════════════════════════════╝
- echo.
-
- pause
- goto aap
复制代码
修改后得代码结果图如下:
╔═ ═╗
已连接设备
╔════════════════════════════════ ╚═ ═╝ ═════════════════════════════╗
[1] 系统版本:HarmonyOS2.0.0 model:VRD-W10 序列号:RCJ6R20A22000022
[2] 系统版本:andorid12 model:22021211RC 序列号:ad8670af
╚══════════════════════════════════════════════════════════════════════════════════╝
请按任意键继续. . .
求大佬助力!!!
我这边不知道为啥上传图片失败,暂时就不上图了
作者: Batcher 时间: 2023-1-16 15:11
回复 1# dos-a
如果需要上传文件,可以用阿里云盘或百度网盘。
如果需要上传截图,可以找个图床,例如:
http://bbs.bathome.net/thread-60985-1-1.html
作者: dos-a 时间: 2023-1-16 15:27
本帖最后由 dos-a 于 2023-1-16 15:39 编辑
原bat效果
如果超出长度会显示为:
今天碰巧又再次搜索到左对齐得方法
3, set/p 特殊用法 .
左对齐(注意代码中的是制表符):
@echo off&setlocal enabledelayedexpansion
for /l %%i in (1 10 999) do (set/a n+=1&set /p=^%%i <nul
if !n!==5 set n=0&echo.
)
pause
复制代码
结果如图:
我把这个和我得结合后未能如愿显示:
而且单行也出了问题
我需要得是这个得到对齐
其他正常显示即可
作者: Batcher 时间: 2023-1-16 16:25
回复 1# dos-a
根据你看到的那个左对齐的方法,顶楼第二段代码第43行<左侧不应该是空格,而是制表符:- set /a n+=1&set /p=^%%s <nul
复制代码
作者: dos-a 时间: 2023-1-16 16:33
回复 4# Batcher
我试试
,感谢大佬
作者: dos-a 时间: 2023-1-16 16:58
好像不太行
作者: dos-a 时间: 2023-1-16 17:20
我所需要得是
下图和
这个一样
不会因为字符长度太长而超出
作者: Batcher 时间: 2023-1-16 17:20
回复 6# dos-a
你连上那两个设备之后,单独在命令行窗口执行:- adb devices > 1.txt
- adb -s XXX shell getprop ro.product.model > 2-1.txt
- adb -s YYY shell getprop ro.product.model > 2-2.txt
- adb -s XXX shell getprop hw_sc.build.platform.version > 3-1.txt
- adb -s YYY shell getprop hw_sc.build.platform.version > 3-2.txt
- adb -s XXX shell getprop ro.build.version.release > 4-1.txt
- adb -s YYY shell getprop ro.build.version.release > 4-2.txt
复制代码
把生成的这7个txt文件打包上传到网盘,我试试。
作者: dos-a 时间: 2023-1-16 17:28
回复 8# Batcher
ok
作者: dos-a 时间: 2023-1-16 17:40
回复 8# Batcher
17:39:27
我用蓝奏浏览器分享了[adb-devices], 下载链接:https://wwp.lanzoup.com/iNLP50l59tqb , 你可以不限速下载哦
17:39:50
提取码:gmte
作者: dos-a 时间: 2023-1-17 15:09
回复 8# Batcher
大佬,结果如何??
作者: Batcher 时间: 2023-1-17 19:06
回复 10# dos-a
我打不开这个链接,换个网盘试试?
作者: dos-a 时间: 2023-1-17 19:51
回复 12# Batcher
OK
作者: dos-a 时间: 2023-1-17 19:53
我用蓝奏浏览器分享了[adb-devices], 下载链接:https://wwp.lanzoup.com/iBVLX0l8nzmf , 你可以不限速下载哦
应该可以了
作者: dos-a 时间: 2023-2-1 11:10
我按照大佬你说的
echo [!cnt!]系统版本: !system! !version! model: !f! 序列号: %%a >>1.txt
操作后发现如果1.txt编码为utf-8时是正常对齐得,但是我将他改为gb2312后就出现了对不齐得情况
如图 ;
显示图:
utf-8:
gb2312:
1.txt文件链接【已测试可下载】:
我用蓝奏浏览器分享了[1], 下载链接:https://wwp.lanzoup.com/iH8P40mb0dbi 提取码 : 4424, 你可以不限速下载哦
作者: dos-a 时间: 2023-2-1 11:10
回复 12# Batcher
大佬麻烦,有空帮忙看下了,谢谢
作者: terse 时间: 2023-2-1 13:13
46行 这里“系统版本: !system! !version! model:” mode:前为什么会有空格呢
作者: dos-a 时间: 2023-2-1 15:47
回复 17# terse
用于对齐得制表符(tab)
作者: dos-a 时间: 2023-2-1 15:49
回复 17# terse
还有那边我已经使用::注释掉了
作者: terse 时间: 2023-2-1 16:58
回复 19# dos-a
貌似输出的model前面是有空格的 处理掉这个空格不知道行不
作者: dos-a 时间: 2023-2-1 18:14
回复 20# terse
截取后再打印输出?
作者: dos-a 时间: 2023-2-1 18:19
所以还是获取所有字符得长度然后去填充or减少来进行对齐?
作者: terse 时间: 2023-2-1 21:09
回复 22# dos-a
如果不确定所得字符的长度范围 可以试试补空截取后处理
作者: czjt1234 时间: 2023-2-1 21:51
回复 23# terse
是的,不要用制表符,共3列
第一列加50个空格,然后取左起40个字符
第二列加40个空格,然后取左起30个字符
作者: dos-a 时间: 2023-2-2 00:35
50会不会太多了?
作者: czjt1234 时间: 2023-2-2 10:48
回复 25# dos-a
这个可以自己测试,到底加多少,取左起多少个
作者: dos-a 时间: 2023-2-3 12:03
回复 26# czjt1234
还有个思路是把所有数据存储到临时变量通过for筛选出最大的,然后对比所有字符长度补齐空格,但是这样刷新设备会因为设备链接太多而出现卡顿情况
作者: dos-a 时间: 2023-2-3 12:16
会影响使用体验
作者: dos-a 时间: 2023-2-3 12:17
因为美刷新一次他就得从新计算
作者: czjt1234 时间: 2023-2-3 18:44
回复 29# dos-a
你可以自行估算啊,第一列如果你估计最多只可能30个字母,那么就加31个空格再取左起31个字母
作者: dos-a 时间: 2023-4-5 15:51 标题: 已解决
本帖最后由 dos-a 于 2023-4-9 15:24 编辑
代码块:
setlocal enabledelayedexpansion
set "al=adb"
set "cnt="
echo,
for /f "skip=1 tokens=1,4 delims= " %%a in ('!al! devices -l') do (
set "serial=%%a"
set "model=%%b"
set nc=0
set SS=0
set aq=
set "version="
set "system="
set "cv="
if "!Model!"=="" (
set "model=model:未连接 "
) else (
set "modelw=!Model:_=-!"
for /f "delims=" %%a in ('cmd/u/cecho !modelw!^|more')do set /a nc+=1
set /a SS=20-!nc!
for /L %%i in (1,1,!ss!) do (
set "aq=!aq! "
)
set "model=!modelw!!aq!"
)
for /f "delims=" %%c in ('start /b !al! -s !serial! shell "getprop hw_sc.build.platform.version | tr -d '\n'" 2^>nul') do (
set "cv=%%c"
)
if "!cv!"=="" (
set "sv="
for /f "delims=" %%s in ('start /b !al! -s !serial! shell "getprop ro.build.version.release | tr -d '\n'" 2^>nul') do (
set "sv=%%s"
)
if "!sv!"=="" (
set "system=未连接"
) else (
set "version=!sv!"
set "system=安卓"
)
) else (
set "version=!cv!"
set "system=鸿蒙"
)
set /a cnt+=1
echo [!cnt!] 系统版本: !system! !version! !model!序列号: !serial!
echo,
)
作者: dos-a 时间: 2023-4-5 15:53 标题: 11
本帖最后由 dos-a 于 2023-4-5 16:10 编辑
33333333333333333333333333
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |