找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 26238|回复: 2

[文本处理] 【已解决】求助BAT如何将字符串变量(含通配符的路径)分割?

[复制链接]
发表于 2014-9-10 14:01:23 | 显示全部楼层 |阅读模式
本帖最后由 yu2n 于 2014-9-10 16:33 编辑

求助,BAT如何将字符串变量(含通配符的路径)分割?
原字符串:
  1. D:\TEST\新建文件夹 (0)\*.txt
复制代码
注意:含通配符的路径中有空格和英文小括号以及其他特殊字符,此处为变量。

要求分割成以下两部分,并且赋值给变量,希望有适应性很强的解法:
一、路径部分:
  1. D:\TEST\新建文件夹 (0)
复制代码
二、通配符部分:
  1. *.txt
复制代码
请各位大大不吝赐教……
 楼主| 发表于 2014-9-10 16:05:12 | 显示全部楼层
我自己写了一个,又臭又长:

  1. @echo off & SetLocal EnableDelayedExpansion
  2. set "str00=V:\*.txt"
  3. set "str00=V:\新 建\新建 文件夹 (0)\*.txt"

  4. :: 替换空格\符号为标签
  5. set "str01=%str00: =#CHR32#%"
  6. set "str01=%str01:\=#CHR92#%"

  7. :: 计数
  8. set/a n=0
  9. Call :_count_args  %str01:#CHR92#= %
  10. set/a nCount=%n%

  11. :: 合并字符串
  12. set str=
  13. set/a n=1
  14. Call :_join_args  %str01:#CHR92#= %

  15. :: 移除标签后得到1部分
  16. set "str02=%str:#CHR92#=\%"
  17. set "str02=%str02:#CHR32#= %"
  18. :: 替换字符后得到2部分
  19. set "str03=!str00:%str02%\=!"

  20. echo nCount --%nCount%--
  21. echo str00 --%str00%--
  22. echo str01 --%str01%--
  23. echo str02 --%str02%--
  24. echo str03 --%str03%--
  25. pause

  26. :: 计数
  27. :_count_args
  28.   set/a n+=1
  29.   SHIFT
  30.   echo,%~1
  31.   if "%~1" neq "" goto :_count_args
  32.   goto :eof
  33.   
  34. :: 合并字符串
  35. :_join_args
  36.   if %n% GEQ %nCount% goto :eof
  37.   set/a n+=1
  38.   if defined str (set "str=%str%#CHR92#%~1") else (set "str=%~1")
  39.   SHIFT
  40.   goto :_join_args
  41.   goto :eof
复制代码
发表于 2014-9-10 16:25:49 | 显示全部楼层
或许可以这样:
  1. @echo off
  2. set "str=D:\TEST\新建文件夹 (0)\*.txt"
  3. for /f "delims=" %%a in ("%str%") do (
  4.     for /f "delims=" %%b in ("%%a\..") do echo,%%~fb
  5.     echo,%%~nxa
  6. )
  7. pause
复制代码

评分

参与人数 1技术 +1 收起 理由
yu2n + 1 乐于助人

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-21 02:24 , Processed in 0.031007 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表