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

评分人数

TOP

返回列表