.bat
小さなプロジェクトで作業しているファイルに 2 つの作業を行う必要があります。まず最初に、起動した同じフォルダーに (再帰的に) 含まれているファイル名.bat
が 100 文字を超えているかどうかを確認する必要があります。もしそうなら、私はそれを 92 文字の長さにし、拡張子を保持する必要があります。
たとえば、次のファイル名があります。
IncrediblyLongFileNameIAmSorryForThisItLooksLikeSomeDamnSpamJesusIAintEvenCloseTo100yetalmostwaitforitYEAH.omg
上記のファイル名は 110 文字です。拡張子を保持する必要があるため、プログラムはファイルの名前を次のように変更する必要があります。
IncrediblyLongFileNameIAmSorryForThisItLooksLikeSomeDamnSpamJesusIAintEvenCloseTo100yetalmos.omg
これまでのところ、私の主な問題は、バッチでファイル名文字列を操作する方法がわからないことです。私はこのコードを使用しました:
@echo off & setlocal enableextensions
FOR /R %%i IN (*.*) DO (
ECHO %%~nxi
FOR /f "delims=:" %%a in ('
^(echo."%%~nxi"^& echo.^)^|findstr /o .'
) DO set lenght=%%a-5
echo The length of "%%~nxi" is %lenght%
)
endlocal & goto :EOF
しかし、私はSET
の中には入れFOR
ませんし、基本的な計算もできません (つまり、-5
演算はできません)。
2番目のことは、最初のものが完了したら簡単になるはずですが、フォルダー内のすべてのファイル名を比較し(再帰的です)、同じファイル名がないことを確認するだけです。プログラムが同じファイル名を見つけた場合、2 番目に見つかった名前を変更してl1l
、最後に のようなものを追加する必要があります。(ここでは括弧を使用できません。そのため、l
代わりに 2 つの s を使用して数字をカバーしています。) 注意する必要があるのは、ファイル拡張子だけです。ファイル拡張子の後には何も追加できないためです。使えません。
これを達成する方法について誰かが説明できますか? 私はこれを自分で解決できるようになりたいと思っていますが、バッチプログラミングの経験がありません。