您可以使用带有for /l
循环的可变子字符串来确定字符串的长度。继续循环,直到文件名的x个字符等于文件名,然后你就找到了你的长度。
遍历目录中的所有文件以查找最长的文件。然后添加 5 以确保最长的文件仍然有 5 个点。然后对于目录中的每个文件,该数字减去长度就是您需要的点数。
易榨柠檬汁。
@echo off
setlocal enabledelayedexpansion
:: get longest filename in directory
set longest=0
for %%I in (*) do (
call :length "%%~I" len
if !len! gtr !longest! set longest=!len!
)
:: Dot fill each line
for %%I in (*) do (
call :length "%%~I" len
set /a dots=%longest% + 5 - len
<NUL set /P "=%%~I"
call :dots !dots!
echo %%~zI bytes
)
:: end main script
goto :EOF
:length <filename> <var_to_set>
setlocal enabledelayedexpansion
set "tmpfile=%~1"
for /l %%I in (1,1,100) do (
if "!tmpfile!"=="!tmpfile:~-%%I!" (
endlocal && set "%~2=%%I"
goto :EOF
)
)
:dots <number_of_dots>
setlocal
for /l %%I in (1, 1, %~1) do <NUL set /P "=."
goto :EOF
注意:此脚本假定您的文件名不会超过 100 个字符。如果可以,那么在子程序100
中增加for /l
循环中的。:length
如果您想要一个速度优化的:dots
子例程,请将脚本的最后四行替换为以下内容:
:dots <number_of_dots>
setlocal enabledelayedexpansion
set "dots=...................................................................................................."
<NUL set /P "=!dots:~-%1!"
goto :EOF