回复 2# pusofalse
在你思路上进行严格地判断改进了下:- @echo off
- cd /d %~dp0
- ::思路:通过字母字符范围大小,逐个字符比较,保留英文字母。
- for /f "delims=" %%i in ('dir /b /a-d') do (
- ::排除批处理自身
- if "%%~nxi" neq "%~nx0" (
-
- ::截取文件名,不含扩展名
- set "name=%%~ni" & set "old=%%~nxi"
- ::避免文件名中有感叹号,动态感知变量值的变化
- setlocal enabledelayedexpansion
-
- set "name1=!name!" & call :loop
- echo;!nam!
- ren "!old!" "!nam!%%~xi"
-
- ::用完一次清除该变量。避免下次使用还有残留值。
- set "nam="
-
- endlocal
- )
- )
-
- pause>nul & goto :eof
-
- :loop
- if defined name1 (
- ::逐个截取字符作判断
- set "var=!name1:~0,1!"
- ::忽略大小写,保证值在字母头尾之间
- if /i "!var!" leq "Z" (
- if /i "!var!" geq "A" (
- ::满足上面两个条件下作字符串拼接,即有效文件名拼接。
- set "nam=!nam!!var!"
- )
- )
- ::每次循环后,从左往右依次截断字符串。直至把字符串截取完成空。
- set "name1=!name1:~1!"
- goto loop
- )
复制代码
|