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

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

本帖最后由 yu2n 于 2014-9-10 16:33 编辑

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

要求分割成以下两部分,并且赋值给变量,希望有适应性很强的解法:
一、路径部分:
  1. D:\TEST\新建文件夹 (0)
复制代码
二、通配符部分:
  1. *.txt
复制代码
请各位大大不吝赐教……
『千江有水千江月』千江有水,月映千江;万里无云,万里青天。    http://yu2n.qiniudn.com/

我自己写了一个,又臭又长:
  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
复制代码
『千江有水千江月』千江有水,月映千江;万里无云,万里青天。    http://yu2n.qiniudn.com/

TOP

或许可以这样:
  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

评分人数

    • yu2n: 乐于助人技术 + 1

TOP

返回列表