Board logo

标题: [文本处理] [分享]批处理不用外部命令提取特定标识字符之间的字符串 [打印本页]

作者: hfxiang    时间: 2022-7-1 11:41     标题: [分享]批处理不用外部命令提取特定标识字符之间的字符串

本例的特定字符为单引号(')

@echo off
::提取第1对单引号括起来的字符串,如无单引号则取整串
::如只有1个单引号(非末位),则取单号之后的子字符串
::如只有1个单引号处且于末位,则结果为空串
@setlocal enableDelayedExpansion
set "str=File 'D:\tmp\1051.jpg' contains no Exif timestamp"
set "str1=%str:*'=%"
if defined str1 (
        set "str='%str1:*'=%"
        call set str=%%str1:!str!=%%
) else (
        set "str="
)
echo;提取的字符串为:%str%
endlocal
作者: qixiaobin0715    时间: 2022-7-1 15:05

只提取第1对单引号之间的字符,不符合条件(不含单引号或只含有1个单引号)的则不提取,可以这样:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set "str1=File 'D:\tmp\1051.jpg' contains no Exif timestamp"
  4. for /f "tokens=1-2* delims='" %%a in ("!str1!") do (
  5.     if "!str1:~,1!"=="'" (
  6.         if not "%%b"=="" (
  7.             set str2=%%a
  8.         ) else if "!str1:~-1!"=="'" (
  9.             set str2=%%a
  10.         )
  11.     ) else (
  12.         if not "%%c"=="" (
  13.             set str2=%%b
  14.         ) else if "!str1:~-1!"=="'" (
  15.             set str2=%%b
  16.         )
  17.     )
  18. )
  19. if not defined str2 (echo,未提取到符合条件的字符串。) else echo,提取的字符串为:!str2!。
  20. pause
复制代码





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