[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程批处理在线视频分享
返回列表 发帖
原帖由 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

  1. @echo off
  2. set "z=a b c d e f g h i j k l m n o p q r s t u v w x y z"
  3. for /f "delims=" %%a in ('dir /b *^|findstr /vc:"%~nx0"') do (
  4. set k=
  5. set wenben=%%~na
  6. set wenjian=%%a
  7. setlocal enabledelayedexpansion
  8. for /l %%b in (0,1,50) do (
  9.     set zimu=!wenben:~%%b,1!
  10. for %%c in (!z!) do (
  11.        if /i "!zimu!"=="%%c" set k=!k!!zimu!
  12.    )
  13. )
  14. ren "!wenjian!" "!k!%%~xa"
  15. endlocal
  16. )
  17. pause
复制代码
心累~努力,为了美好的明天。

TOP

能不能直接用通配符呢………………
比如*.doc 然后改成你想要的就可以了…………反正也只有唯一的三种文件,不用担心改错……

TOP

返回列表