批处理文件重命名“ This.is.a.FIlename.mp3”到'tiaf.mp3”

好的,所以我有一些文件的目录。我想做一个特定的文件 - renamingscript 我坚持使用这个部分,只取文件名的每个部分的第一个字母: 如果文件名是
This.is.a.FIle.mp3
我想将其重命名为
tiaf.mp3
请注意我希望它全部是小写的。 单词长度是可变的,所以我不能从它作为局部变量引用!变量:~0,2! 谁有人可以帮忙? 感谢名单! 编辑:我forggot问。如果你有一个想法,如果文件名是我提到的格式的测试。因为如果调用该文件。 'file.mp3'然后我不希望它被重命名为'f.mp3'     
已邀请:
这应该有效,但如果你想也允许“!”文件名中的感叹号,必须稍微扩展一下。
@echo off
setlocal EnableDelayedExpansion
for %%f in ("C:tempfolder*.*") do (
    call :createName "%%~f"
)
goto :eof


:: Compress a filename with more than one dot to only the first (lower) letters of each part
:: one.TWO.three.four.exe to ottf.exe
:createName <dot-filename>
setlocal
set "filename=#.%~n1"
set "ext=%~x1"
set "count=0"
set "short="

:createName.loop
for %%a in ("!filename!") do (
    set "part=%%~xa"
    set "filename=%%~na"

    if defined part (
        set /a count+=1
        set "char=!part:~1,1!"
        call :toLower char
        set "short=!char!!short!"
    ) ELSE (
        set "char="
    )   
    rem echo "%%~na"-"%%~xa" "!char!"  "!short!"
)
if defined part goto :createName.loop
set "short=!short!!ext!"
if !count! GTR 1 (
    echo ren "%~f1" "!short!"
)
(
    endlocal
    goto :eof
)


:: convert a char to the lower variant or leave it unchanged if it isn't a char
:: use the %var:*n=% syntax to remove the front of a string, to get the correct char
:toLower <variable to char>
setlocal EnableDelayedExpansion
(
set "char=!%~1!"
set "helper=##aabbccddeeffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz"
set "lower=!helper:*%char%=!"
set "lower=!lower:~0,1!"
if "!lower!"=="#" set "lower=!char!"
)
(
    endlocal
    set "%~1=%lower%"
    goto :eof
)
    
这种逻辑会对你有用吗:
@echo off

for /f "delims=|" %%f in ('dir /b C:temp') do call :runsub %%f
goto EOF

:runsub
for /f "tokens=1,2,3,4 delims=." %%a in ("%~n1") do set a=%%a&set b=%%b&set c=%%c&set d=%%d

if not "%a%"=="" echo %a%
if not "%b%"=="" echo %b%
if not "%c%"=="" echo %c%
if not "%d%"=="" echo %d%

:EOF
您可以将echo%a%,echo%b%等更改为sets并从中获取子字符串。这也只能获得前4个分割,如果需要,可以添加更多分割。同时将C: temp更改为相应的目录。     

要回复问题请先登录注册