[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[其他] [已解决] 请教批处理如何将多台设备得序列号,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
   ╚══════════════════════════════════════════════════════════════════════════════════╝

请按任意键继续. . .

求大佬助力!!!
我这边不知道为啥上传图片失败,暂时就不上图了

11

本帖最后由 dos-a 于 2023-4-5 16:10 编辑

33333333333333333333333333

TOP

已解决

本帖最后由 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,
)

TOP

回复 29# dos-a


    你可以自行估算啊,第一列如果你估计最多只可能30个字母,那么就加31个空格再取左起31个字母
1

评分人数

    • dos-a: 乐于助人技术 + 1

QQ 20147578

TOP

因为美刷新一次他就得从新计算

TOP

会影响使用体验

TOP

回复 26# czjt1234

还有个思路是把所有数据存储到临时变量通过for筛选出最大的,然后对比所有字符长度补齐空格,但是这样刷新设备会因为设备链接太多而出现卡顿情况

TOP

回复 25# dos-a


    这个可以自己测试,到底加多少,取左起多少个

QQ 20147578

TOP

50会不会太多了?

TOP

回复 23# terse


    是的,不要用制表符,共3列

第一列加50个空格,然后取左起40个字符

第二列加40个空格,然后取左起30个字符

QQ 20147578

TOP

回复 22# dos-a
如果不确定所得字符的长度范围 可以试试补空截取后处理
1

评分人数

    • dos-a: 乐于助人技术 + 1

TOP

所以还是获取所有字符得长度然后去填充or减少来进行对齐?

TOP

回复 20# terse
截取后再打印输出?

TOP

回复 19# dos-a
貌似输出的model前面是有空格的 处理掉这个空格不知道行不

TOP

回复 17# terse
还有那边我已经使用::注释掉了

TOP

返回列表