編集:forループがサブディレクトリのサブディレクトリに実行され、各サブディレクトリから「アイコン」フォルダーを返し、それを最初の引数として渡していると思います。最初のループが最初のサブディレクトリのセットのみを通過するようにする必要があります
ディレクトリ構造の例:
ファイル\01\アイコン ファイル\02\アイコン ファイル\03\アイコン
つまり、01、02、03、01\Icon、02\Icon、03\Icon の順に実行されます。最初のレベルで停止する必要があります。
for ループがうまくいかない! 直してもらえませんか?
ネストされた for ループが何度も実行されているようです。*.ico のファイル名を見つけるために一度だけ実行する必要があります。*.ico を見つけるためのより迅速な方法があるかどうかはわかりません。ただし、forループなしでアイコンファイル名を返す方法はわかりません。
@ECHO OFF
set ICOINI=Desktop.ini
for /D /R "%cd%" %%d IN (*) do call :Write_File %%~nd
goto :End_File
:Write_File
attrib +s "%CD%\%1"
echo Set Attributes for: %cd%\%1
for %%F in ("%CD%\%1\Icon\*.ico") do set ICO=%%~nxF
IF EXIST "%CD%\%1\%ICOINI%" attrib -a -s -h "%1\%ICOINI%"
echo [.ShellClassInfo]>"%CD%\%1\%ICOINI%"
echo IconResource="%CD:~2%\%1\%ICO%">>"%CD%\%1\%ICOINI%"
echo InfoTip="%ICO:~0,-4%">>"%CD%\%1\%ICOINI%"
attrib -a +s +h "%CD%\%1\%ICOINI%"
goto :EOF
:End_File
Pause