- 帖子
- 22
- 积分
- 284
- 技术
- 0
- 捐助
- 0
- 注册时间
- 2008-8-18
|
原帖由 pusofalse 于 2008-8-5 23:34 发表
看到terse前辈的代码,忽然闪现了一个思路,但立刻消失了,觉得这题肯定有更简单的方法。
只需思考一个问题,如何把字母从这一堆特殊字符中提取出来即可。
根据 pusofalse斑竹的思路,提取字符最方便的工具肯定是正则表达式,批处理命令唯一一个支持正则的就是findstr,能不能用它来提取呢?
测试成功!
满足要求:简洁、通用、效率不至于太低。
特点:通用性很强,只需要修改 findstr 的正则参数就能实现各种功能,举几个例子。
"[^-!-~0-9a-z]" 保留全角字符(中文、全角标点等)
"[a-z0-9]" 保留英文字母和数字
@echo off&cls
for /f "tokens=*" %%i in ('dir /b/a-d "*.*"') do (
if "%%~nxsi" neq "%~nxs0" (
set "旧文件名=%%~nxsi"&set "文件名串=%%~ni"&set "新文件名="&set "counter=0"
del ~filenamechar.lst /q>nul 2>&1
setlocal enabledelayedexpansion
call :split
for /f "tokens=*" %%n in ('findstr "[a-z]" ~filenamechar.lst') do set "新文件名=!新文件名!%%n"
if "!新文件名!" neq "" (
echo ren !旧文件名! !新文件名!%%~xi
) else (
echo ^(文件"!旧文件名!"不含字母,不能重命名.^)
)
endlocal
)
)
del ~filenamechar.lst /q>nul 2>&1
pause&goto :eof
:split
if "!文件名串:~%counter%,1!" neq "" (
if "!文件名串:~%counter%,1!" neq " " echo !文件名串:~%counter%,1!>>~filenamechar.lst
set /a counter+=1
goto split
)
goto :eof |
-
1
评分人数
-
|