この問題は、ファイルを読み込むのが難しいです。どうやらデフォルトでは一度に8192バイト以上は読めないようです。
for /F %%s in (names.txt) do ( echo %%s )
適当な文字で区切って少しずつ読めば長い文字列でも読めます。例えばZで区切って、その31項目目を表示するには、
for /F "delims=Z tokens=31" %%s in (names.txt) do ( echo %%s )
ただ、これも31項目までしか取れないらしく、最後までは読めません。仕方がないので、カンマの代わりに改行を入れてそれを読むようにしました。
また、ソートをしなければならなりませんが、sortコマンドを使ってその結果を使うことにしました。
for /F "usebackq" %%s in (`sort names2.txt`) do ( … )
このように"usebackq"を使うとコマンドの出力を読めるようになります。
スコアにするときは、sA = 1, sB = 2という変数を作っておくと簡単です。
@echo off setlocal enabledelayedexpansion call :dict s 1 ABCDEFGHIJKLMNOPQRSTUVWXYZ set /a s = 0 set /a k = 1 for /F "usebackq" %%s in (`sort names2.txt`) do ( call :score %%~s set /a s += !ERRORLEVEL! * !k! set /a k += 1 ) echo %s% exit /b 0 :dict if "%3" == "" exit /b 0 set /a k = %2 set str=%3 set /a %1%str:~0,1% = %k% set /a k += 1 call :dict %1 %k% %str:~1% exit /b 0 :score setlocal if "%1" == "" exit /b 0 set str=%1 set /a s = "s%str:~0,1%" call :score %str:~1% set /a s += %ERRORLEVEL% exit /b %s%