代码之家  ›  专栏  ›  技术社区  ›  Ghoul Fool

findstr“^”如何等同于空目录?

  •  0
  • Ghoul Fool  · 技术社区  · 6 年前

    Windows中的批处理文件在最佳情况下可能会令人困惑。你怎么知道的

      findstr "^"
    

    for /d /r %1 %%A in (.) do (
      dir /ad /b "%%~fA" 2>nul | findstr "^" >nul || echo %%~fA
    )
    

    取自 dbenham's answer

    除非我看错了

    dir /ad /b "%%~fA" 2>nul
    

    查找空文件夹的。

    0 回复  |  直到 6 年前
        1
  •  3
  •   Seth McCauley    6 年前

    这个脚本将获得一个目录列表(及其子目录),循环检查每个目录以检查子目录,然后只列出不包含子目录的目录名。提供的链接中的原始脚本的工作方式类似,只是它只列出 文件)。以下是每一部分代码的细目:


    这个 for /d 在您的示例中,将获取目录的递归列表:

    for /d /r %1 %%A in (.) do ( )
    
    • for /d 循环指定的目录集
    • for /d /r 告诉 for
    • %1
    • %%A
    • 英寸(套) 指定要循环通过的目录集
    • 在(.) “告诉 对于 循环浏览所有目录

    你电脑里的密码

      dir /ad /b "%%~fA" 2>nul | findstr "^" >nul || echo %%~fA
    
    • dir /ad /b "PATH" 获取的列表 子目录
    • " %%~fA “将当前目录名扩展到其完整路径
    • 2>nul 隐藏任何 dir 将STDERR重定向到nul时出错
    • | 管道查找的子目录列表 进入之内 findstr
    • findstr "^" 然后检查子目录的非空列表
    • >nul findstr公司 将所有输出重定向到nul的结果
    • || 如果上一个命令失败(否),则运行命令 findstr公司 结果)
    • 如果找不到子目录,则返回目录名*

    *请注意 LotPings公司 dir /a /b 列出所有文件和目录 dir /ad /b

    编辑: .

        2
  •  2
  •   Ben Voigt    6 年前

    我相信你错过的是 ||

    知道了这一点,就可以理解 dir /ad /b "%%~fA" 2>nul | findstr "^" >nul dir 不是空的。列表为空时失败。