Board logo

标题: [文本处理] 批处理如何在变量多个参数中查找到需要的字符? [打印本页]

作者: szl1123    时间: 2023-4-30 22:35     标题: 批处理如何在变量多个参数中查找到需要的字符?

已知变量
%mz% =45 45 89 365 56 94 56584 364
如何查找到包含658的参数并设置到变量%m%
得到变量%m%=56584

这个查找的包含658字符的参数位置不固定。
作者: 77七    时间: 2023-5-1 00:05

  1. @echo off
  2. set "mz=45 45 89 365 56 94 56584 364"
  3. for %%a in (%mz%) do (
  4. echo %%a|find "658" 1>nul && set m=%%a
  5. )
  6. pause
复制代码

作者: Batcher    时间: 2023-5-1 09:04

回复 1# szl1123


    如果有多个参数包含658,希望如何处理?
作者: Batcher    时间: 2023-5-1 09:09

回复 1# szl1123


减少外部命令find调用
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set "mz=45 45 89 365 56 94 56584 364"
  4. for %%a in (%mz%) do (
  5.     set "x=%%a"
  6.     if "!x:658=!" neq "%%a" (
  7.         set "m=%%a"
  8.     )
  9. )
  10. echo,%m%
  11. pause
复制代码

作者: szl1123    时间: 2023-5-1 10:08

回复 2# 77七

非常感谢老师
作者: szl1123    时间: 2023-5-1 10:09

回复 3# Batcher


    目前应该不会有重复的结果
作者: szl1123    时间: 2023-5-1 10:09

回复 4# Batcher


    感谢各位老师,
作者: szl1123    时间: 2023-5-1 13:30

回复 2# 77七


    现在还有一个情况
%mz% =45 45 89 365 56 94 56584 364 5468
查找到包含658的参数后,要得到这个参数以及后面的所有字符,设置到变量%m%
得到结果应该是
%m%=56584 364 5468
包含后面的空格

还请各位老师帮忙解答一下,谢谢。
作者: 77七    时间: 2023-5-1 14:11

回复 8# szl1123


  
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set "mz=45 45 89 365 56 94 56584 364 5468"
  4. for %%a in (%mz%) do (
  5. echo %%a|find "658" 1>nul && set "m=%%a" || (
  6. if defined m (
  7. set "m=!m! %%a"
  8. )
  9. )
  10. )
  11. echo %m%
  12. endlocal
  13. pause
复制代码

作者: terse    时间: 2023-5-1 17:03

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set "mz=45 45 89 365 56 94 56584 364 5468"
  4. for %%a in (%mz%) do (
  5.     set "x=%%a"
  6.     if not defined m (
  7.        if "!x:658=!" neq "%%a" (
  8.           set "m=%%a"
  9.        )
  10.    ) else set "m=!m! %%a"
  11. )
  12. echo,%m%
  13. pause
复制代码





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