dishuo 当前离线
四级士官
原帖由 pusofalse 于 2008-8-5 23:34 发表 看到terse前辈的代码,忽然闪现了一个思路,但立刻消失了,觉得这题肯定有更简单的方法。 只需思考一个问题,如何把字母从这一堆特殊字符中提取出来即可。
@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
评分人数
TOP
尘丶 当前离线
@echo off 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" for /f "delims=" %%a in ('dir /b *^|findstr /vc:"%~nx0"') do ( set k= set wenben=%%~na set wenjian=%%a setlocal enabledelayedexpansion for /l %%b in (0,1,50) do ( set zimu=!wenben:~%%b,1! for %%c in (!z!) do ( if /i "!zimu!"=="%%c" set k=!k!!zimu! ) ) ren "!wenjian!" "!k!%%~xa" endlocal ) pause复制代码
无忧 当前离线
上等兵
ai20110304 当前离线
一级士官
for /f "tokens=%n% delims=%str% " %%a in ("%var%") 复制代码
for /f "tokens=%n% delims=%str% " %%a in ("!var!")复制代码
@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 )复制代码
qixiaobin0715 当前离线
大校
@echo off for %%a in (*) do ( if "%%~nxa" neq "%~nx0" ( set "filename=%%~na" set "str=%%a" setlocal enabledelayedexpansion set "filename=!filename: =! for /l %%b in (0,1,50) do ( set "str1=!filename:~%%b,1!" echo,!str1!|findstr [a-z]>nul 2>nul&&set str2=!str2!!str1! ) ren "!str!" "!str2!%%~xa" set str2= endlocal ) ) pause复制代码