可変部分文字列をfor /l
ループで使用して、文字列の長さを決定できます。filenameのx文字数がfilenameと等しくなるまでループし続けると、長さがわかります。
ディレクトリ内のすべてのファイルをループして、最も長いファイルを見つけます。次に、これに 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
は、スクリプトの最後の 4 行を次のように置き換えます。
:dots <number_of_dots>
setlocal enabledelayedexpansion
set "dots=...................................................................................................."
<NUL set /P "=!dots:~-%1!"
goto :EOF