[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
回复 5# batman
  1. for /f "tokens=%n% delims=%str% " %%a in ("%var%")
复制代码
变量引用有误,原文件名字符串中含感叹号包裹,会造成感叹号之间的字母当作变量是为空值不存在。如:一b!a!1235@_ s%#8i  三 c.rar    ----> !a!    最后处理出来是 : bsic.rar
应防止变量值中含感叹号,该这样写:
  1. for /f "tokens=%n% delims=%str% " %%a in ("!var!")
复制代码
测试成功。
感谢5楼提供的处理思路。
我就是我,不一样的烟火!

TOP

回复 2# pusofalse


    在你思路上进行严格地判断改进了下:
  1. @echo off
  2. cd /d %~dp0
  3. ::思路:通过字母字符范围大小,逐个字符比较,保留英文字母。
  4. for /f "delims=" %%i in ('dir /b /a-d') do (
  5. ::排除批处理自身
  6. if "%%~nxi" neq "%~nx0" (
  7. ::截取文件名,不含扩展名
  8. set "name=%%~ni" & set "old=%%~nxi"
  9. ::避免文件名中有感叹号,动态感知变量值的变化
  10. setlocal enabledelayedexpansion
  11. set "name1=!name!" & call :loop
  12. echo;!nam!
  13. ren "!old!" "!nam!%%~xi"
  14. ::用完一次清除该变量。避免下次使用还有残留值。
  15. set "nam="
  16. endlocal
  17. )
  18. )
  19. pause>nul & goto :eof
  20. :loop
  21. if defined name1 (
  22. ::逐个截取字符作判断
  23. set "var=!name1:~0,1!"
  24. ::忽略大小写,保证值在字母头尾之间
  25. if /i "!var!" leq "Z" (
  26. if /i "!var!" geq "A" (
  27. ::满足上面两个条件下作字符串拼接,即有效文件名拼接。
  28. set "nam=!nam!!var!"
  29. )
  30. )
  31. ::每次循环后,从左往右依次截断字符串。直至把字符串截取完成空。
  32. set "name1=!name1:~1!"
  33. goto loop
  34. )
复制代码
我就是我,不一样的烟火!

TOP

返回列表