Board logo

标题: [其他] [已解决] 请教批处理如何将多台设备得序列号,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:
  1. :a
  2. cls
  3. @echo off
  4. setlocal enabledelayedexpansion
  5. rem  输出所有设备标识
  6. echo               ╔═             ═╗
  7. echo                   已连接设备
  8. echo    ╔════════════════════════════════  ╚═             ═╝  ═════════════════════════════╗
  9. echo,
  10. set "cnt=0"
  11. for /f "skip=1 tokens=1 delims= " %%a in ('adb devices') do (
  12.     REM 获取设备model号
  13.     for /f "delims=" %%r in ('adb -s %%a shell getprop ro.product.model') do (
  14.         for /f "delims=" %%x in ("%%r") do (
  15.             set "f=%%x"
  16.         )
  17.     )
  18.     set "cv="
  19.     for /f "delims=" %%c in ('adb -s %%a shell getprop hw_sc.build.platform.version') do (
  20.         for /f "delims=" %%x in ("%%c") do (
  21.             set "cv=%%x"
  22.         )
  23.     )
  24.     if "!cv!"=="" (
  25.         REM 安卓
  26.         for /f "delims=" %%s in ('adb -s %%a shell getprop ro.build.version.release') do (
  27.             for /f "delims=" %%x in ("%%s") do (
  28.                 set "sv=%%x"
  29.             )
  30.         )
  31.         set "version=!sv!"
  32.         set "system=andorid"
  33.     ) else (
  34.         REM 鸿蒙
  35.         set "version=!cv!"
  36.         set "system=HarmonyOS"
  37.     )
  38.     set /a cnt+=1
  39. echo       [!cnt!]  系统版本: !system! !version!     model: !f!     序列号: %%a
  40. echo,
  41. )
  42. echo    ╚══════════════════════════════════════════════════════════════════════════════════╝
  43. echo.
  44. pause
  45. 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
中提到得左对齐思路


这部分是我修改后得但是结果不太行
  1. @echo off
  2. :aap
  3. setlocal enabledelayedexpansion
  4. rem  输出所有设备标识
  5. echo               ╔═             ═╗
  6. echo                   已连接设备
  7. echo    ╔════════════════════════════════  ╚═             ═╝  ═════════════════════════════╗
  8. echo,
  9. set "cnt=0"
  10. for /f "skip=1 tokens=1 delims= " %%a in ('adb devices') do (
  11.     REM 获取设备model号
  12.     for /f "delims=" %%r in ('adb -s %%a shell getprop ro.product.model') do (
  13.         for /f "delims=" %%x in ("%%r") do (
  14.             set "f=%%x"
  15.         )
  16.     )
  17.     set "cv="
  18.     for /f "delims=" %%c in ('adb -s %%a shell getprop hw_sc.build.platform.version') do (
  19.         for /f "delims=" %%x in ("%%c") do (
  20.             set "cv=%%x"
  21.         )
  22.     )
  23.     if "!cv!"=="" (
  24.         REM 安卓
  25.         for /f "delims=" %%s in ('adb -s %%a shell getprop ro.build.version.release') do (
  26.             for /f "delims=" %%x in ("%%s") do (
  27.                 set "sv=%%x"
  28.             )
  29.         )
  30.         set "version=!sv!"
  31.         set "system=andorid"
  32.     ) else (
  33.         REM 鸿蒙
  34.         set "version=!cv!"
  35.         set "system=HarmonyOS"
  36.     )
  37.     set /a cnt+=1
  38.     set "ct=    [!cnt!] "
  39.     set "xb=系统版本:!system!!version!"
  40.     set "md=model:!f!"
  41.     set "xl=序列号:%%a"
  42. for /f "delims=" %%s in ("!ct! !xb! !md! !xl!") do (
  43.     set /a n+=1&set /p=^%%s <nul
  44.     if !n!==4 set  n=0&echo .
  45. )
  46. ::echo       [!cnt!]  系统版本: !system! !version!     model: !f!     序列号: %%a
  47. echo,
  48. )
  49. echo    ╚══════════════════════════════════════════════════════════════════════════════════╝
  50. echo.
  51. pause
  52. 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行<左侧不应该是空格,而是制表符:
  1. 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


你连上那两个设备之后,单独在命令行窗口执行:
  1. adb devices > 1.txt
  2. adb -s XXX shell getprop ro.product.model > 2-1.txt
  3. adb -s YYY shell getprop ro.product.model > 2-2.txt
  4. adb -s XXX shell getprop hw_sc.build.platform.version > 3-1.txt
  5. adb -s YYY shell getprop hw_sc.build.platform.version > 3-2.txt
  6. adb -s XXX shell getprop ro.build.version.release > 4-1.txt
  7. 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://bathome.net./) Powered by Discuz! 7.2