好的,所以我有一个包含一些文件的目录。我想做一个特定的文件重命名脚本,我被这部分卡住了,只取文件名每个部分的第一个字母:
如果文件名是
This.is.a.FIle.mp3
我想将其重命名为
tiaf.mp3
请注意,我希望它全部小写。
字长是可变的,所以我不能将它作为局部变量引用!变量:~0,2!
有人可以帮忙吗?谢谢!
编辑:我忘了问。如果您有想法进行测试,如果文件名是我提到的格式。因为如果文件被调用。'file.mp3' 那么我不希望它被重命名为 'f.mp3'
好的,所以我有一个包含一些文件的目录。我想做一个特定的文件重命名脚本,我被这部分卡住了,只取文件名每个部分的第一个字母:
如果文件名是
This.is.a.FIle.mp3
我想将其重命名为
tiaf.mp3
请注意,我希望它全部小写。
字长是可变的,所以我不能将它作为局部变量引用!变量:~0,2!
有人可以帮忙吗?谢谢!
编辑:我忘了问。如果您有想法进行测试,如果文件名是我提到的格式。因为如果文件被调用。'file.mp3' 那么我不希望它被重命名为 'f.mp3'
这应该可以,但是如果您还想允许“!” 文件名中的感叹号,它必须有点扩展。
@echo off
setlocal EnableDelayedExpansion
for %%f in ("C:\temp\folder\*.*") 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% 等更改为设置并从中获取子字符串。这也只获得前 4 个拆分,如果需要,您可以添加更多。还将 C:\temp 更改为适当的目录。