Board logo

标题: [文本处理] 批处理如何获取字符列表出现次数最多的字符? [打印本页]

作者: hentai87    时间: 2021-9-6 22:04     标题: 批处理如何获取字符列表出现次数最多的字符?

  1. echo off
  2. for /f "delims=\ tokens=5" %%i in ('REG QUERY "HKLM\SYSTEM\CurrentControlSet\Services"') do (
  3. for /f "delims=_ tokens=2" %%k in ("%%i") do (
  4. echo %%k
  5. ))
复制代码

4b59e
4b59e
4b59e
4b59e
4b59e
Rec
GPIO2
GPIO2

想要4b59e,明显4b59e最多
作者: newswan    时间: 2021-9-6 22:07

  1. echo off
  2. for /f "delims=\ tokens=5" %%i in ('REG QUERY "HKLM\SYSTEM\CurrentControlSet\Services"') do (
  3. for /f "delims=_ tokens=2" %%k in ("%%i") do (
  4. echo %%k
  5. set /a count_%%k+=1
  6. ))
  7. set count
复制代码

作者: hentai87    时间: 2021-9-6 22:10

回复 2# newswan


   不是想要统计数量,想直接输出最多的那个变量
作者: newswan    时间: 2021-9-6 22:14

回复 3# hentai87


得到统计数量,就找到最大那个了
作者: newswan    时间: 2021-9-6 22:17

本帖最后由 newswan 于 2021-9-6 22:19 编辑
  1. for /f "usebackq tokens=2-3 delims=_=" %%a (`set count_`) do (
  2.     if %%b GTR !count! (
  3.         set count=%%b
  4.         set name=%%a
  5.     )
  6. )
复制代码
有没有多个最大值
作者: hentai87    时间: 2021-9-6 22:41

回复 5# newswan


    运行后闪退
没有多个最大值
作者: hentai87    时间: 2021-9-6 22:42

回复 4# newswan


    最大的结果还得用在其他命令里,不是我想知道是什么值
作者: newswan    时间: 2021-9-6 22:48

回复 7# hentai87

前面加上
  1. setlocal   ENABLEDELAYEDEXPANSION
复制代码

作者: hentai87    时间: 2021-9-6 22:51

回复 8# newswan


    还是闪退
作者: hentai87    时间: 2021-9-6 22:52

echo off
setlocal   ENABLEDELAYEDEXPANSION
for /f "usebackq tokens=2-3 delims=_=" %%a (`set count_`) do (
if %%b GTR !count! (
set count=%%b
set name=%%a
)
)
pause
作者: hentai87    时间: 2021-9-6 23:17

回复 5# newswan


    是不是不全,都没有运行REG QUERY,这段应该放哪里
作者: hentai87    时间: 2021-9-6 23:21

REG QUERY的输出
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WpnService
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WpnUserService_4b59e
。。。
作者: newswan    时间: 2021-9-6 23:29

本帖最后由 newswan 于 2021-9-6 23:39 编辑
  1. echo off
  2. setlocal   ENABLEDELAYEDEXPANSION
  3. for /f "delims=\ tokens=5" %%i in ('REG QUERY "HKLM\SYSTEM\CurrentControlSet\Services"') do (
  4.     for /f "delims=_ tokens=2" %%k in ("%%i") do (
  5.         set /a count_%%k+=1
  6.     )
  7. )
  8. set count=0
  9. for /f "usebackq tokens=2-3 delims=_=" %%a in (`set count_`) do (
  10.     echo %%a %%b
  11.     if %%b GTR !count! (
  12.         set count=%%b
  13.         set name=%%a
  14.     )
  15. )
  16. echo %name%
复制代码

作者: hentai87    时间: 2021-9-6 23:31

回复 13# newswan


    还是闪退
作者: newswan    时间: 2021-9-6 23:40

少 了 in in in in in
作者: hentai87    时间: 2021-9-6 23:46

回复 15# newswan

加了in结果为空
    echo off
setlocal   ENABLEDELAYEDEXPANSION

for /f "delims=\ tokens=5" %%i in ('REG QUERY "HKLM\SYSTEM\CurrentControlSet\Services"') do (
    for /f "delims=_ tokens=2" %%k in ("%%i") do (
        set /a count_%%k+=1
    )
)
set count=0
for /f "usebackq tokens=2-3 delims=_=" %%a in (`set count_`) do (
    if "%%b" GTR "!count!" (
        set count=%%b
        set name=%%a
    )
)
pause
作者: newswan    时间: 2021-9-6 23:51

最后
echo %name%
作者: hentai87    时间: 2021-9-7 00:08

回复 17# newswan

结果不对。。不是次数最多的
作者: newswan    时间: 2021-9-7 00:12

回复 18# hentai87


if 后面 把引号去掉
作者: WHY    时间: 2021-9-7 13:33

本帖最后由 WHY 于 2021-9-7 19:42 编辑
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set "Max=0"
  4. for /f "delims=" %%i in ('REG QUERY "HKLM\SYSTEM\CurrentControlSet\Services"') do (
  5.     for /f "tokens=2 delims=_" %%k in ("%%~nxi") do (
  6.         set /a _%%k+=1
  7.         if !_%%k! GTR !Max! set "Max=!_%%k!" & set "Name=%%k"
  8.     )
  9. )
  10. echo;!Max! !Name!
  11. pause
复制代码

作者: Batcher    时间: 2021-9-7 15:51

回复 16# hentai87
  1. @echo off
  2. for /f "tokens=5 delims=\" %%i in ('reg query "HKLM\SYSTEM\CurrentControlSet\Services"') do (
  3.     for /f "tokens=2 delims=_" %%j in ("%%i") do (
  4.         set /a count_%%j+=1
  5.     )
  6. )
  7. set count=0
  8. for /f "tokens=2-3 delims=_=" %%a in ('set count_') do (
  9.     if %%b gtr !count! (
  10.         set "count=%%b"
  11.         set "name=%%a"
  12.     )
  13. )
  14. echo !name!: !count!
  15. endlocal
  16. pause
复制代码

作者: WHY    时间: 2021-9-7 19:43

本帖最后由 WHY 于 2021-9-7 20:25 编辑
  1. $arr = dir HKLM:\SYSTEM\CurrentControlSet\Services | ?{ $a = $_.Name.Split('\')[-1].Split('_'); $a.Count -ge 2 } | forEach{$a[1]} | group | sort Count -Desc;
  2. '' + $arr[0].Count + ' ' + $arr[0].Name
复制代码





欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2