批处理:如何在大写字母上拆分字符串

时间:2015-03-20 15:29:14

标签: regex batch-file cmd split

我有一个目录结构,其中包含以用户全名(ForenameSurname)命名的主目录,如:

/user/JohnDoe
/user/JaneDoe
/user/MobyDick

现在我要复制整个结构,将ForenameSurname更改为"'前两个名字' +'姓氏'",结果:

/user/JoDoe
/user/JaDoe
/user/MoDick

我知道如何获得子串(~n),但是如何在第一个大写字母上拆分字符串?是否可以使用纯批次?

3 个答案:

答案 0 :(得分:2)

@echo off
    setlocal enableextensions enabledelayedexpansion

    set "root=%cd%\users"

    for /d %%f in ( "%root%\*" ) do (
        set "name=%%~nxf"
        for /f %%a in ("!name:~0,2!"
        ) do for /f "tokens=* delims=abcdefghijklmnopqrstuvwxyz" %%b in ("!name:~2!"
        ) do if not "%%~nxf"=="%%~a%%~b" if not exist "%root%\%%~a%%~b" (
            echo ren "%%~ff" "%%~a%%~b"
        ) else (
            echo "%%~nxf" can not be renamed to "%%~a%%~b"
        )
    )

重命名操作仅响应控制台。如果输出正确,请删除echo命令前缀的ren

答案 1 :(得分:1)

试试这个:

@echo off
setlocal EnableDelayedExpansion

set "upcaseLetters=ABCDEFGHIJKLMNOPQRSTUVWXYZ"

cd \user
for /D %%a in (*) do (
   call :convert name=%%a
   echo New name: !name!
)
goto :EOF


:convert
set "var=%2"
:nextChar
   set "char=%var:~2,1%"
   if "!upcaseLetters:%char%=%char%!" equ "%upcaseLetters%" goto end
   set "var=%var:~0,2%%var:~3%"
goto nextChar
:end
set "%1=%var%"
exit /B

答案 2 :(得分:1)

我会使用我的JREN.BAT regular expression rename utility - 一个混合JScript /批处理脚本,可以在任何Windows机器上运行本机XP。

jren "^([A-Z][a-z])[a-z]*(?=[A-Z])" $1 /d /t /p c:\users

/T选项是测试模式,这意味着它只显示建议的重命名结果。删除/T选项以实际重命名文件夹。