【问题标题】:For loop going crazy! Nested for loop GOTOFor循环要疯了!嵌套 for 循环 GOTO
【发布时间】:2013-06-27 00:21:38
【问题描述】:

编辑:我认为 for 循环正在运行到子目录的子目录中,从每个子目录返回“图标”文件夹并将其作为第一个参数传递。我需要让第一个循环只运行第一组子目录

示例目录结构:

文件\01\图标 文件\02\图标 文件\03\图标

所以它穿过 01,然后是 02,然后是 03,然后是 01\Icon,02\Icon,03\Icon。它需要在第一级停止。

for 循环出错了!请你帮我修一下好吗?

好像嵌套for循环运行faaar的次数太多了,只需要运行一次就可以找到*.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

【问题讨论】:

  • 为什么不尝试将for-loop 嵌套在for-loop 中,我认为它会比for-loop 更好,嵌套在goto-loop 中嵌套在for-loop 中。通过在两个循环中的 do 之后使用 ( ) 来做到这一点。
  • /D /R 循环与 /R 递归,因此它在树中运行。另一个 for 循环正在运行以选择文件名 - 它没有做任何其他事情。你看到了什么问题?
  • 结果是它适用于所有目录,一旦它完成它就会循环尝试查找不存在的 %CD%\Icon。它运行了大约十次试图找到不存在的东西!

标签: windows for-loop batch-file cmd goto


【解决方案1】:

试试这个:

set "ICO="
for %%F in ("%CD%\%~1\Icon\*.ico") do if not defined ICO set "ICO=%%~nxF"

【讨论】:

    猜你喜欢
    • 2015-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-13
    • 2021-12-11
    • 1970-01-01
    相关资源
    最近更新 更多