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

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

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

@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

只提取第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
复制代码

TOP

返回列表