【问题标题】:Stop DIR command searching after first hit is found找到第一个命中后停止 DIR 命令搜索
【发布时间】:2016-05-13 14:15:29
【问题描述】:

在 CMD.EXE 中,我可以使用 DIR 搜索某些内容 - 以以下示例为例:

DIR C:\*EXCEL.EXE /A:-D /B /S

虽然要花点时间打通C:\盘的整个结构,但第一次匹配还是比较快的。

问:有没有办法在找到命中后自动停止命令继续搜索?

我之所以问,是因为我实际上想要 shell 一个 cmd 提示符并将 StdOut 读取到另一个脚本,但是如果我等待整个搜索完成,将会有很长的停顿。

【问题讨论】:

  • 你需要像head -1 这样的东西来只取第一行。在 Powershell 中可能很容易。您可以使用这个选项吗?
  • 可能 - 我想我可以使用相同的方法从 PowerShell 读取输出,但不太确定用于搜索的语法 within PowerShell
  • 有一些方法可以在单独的进程 (start) 中运行像 dir 这样的命令,这可能会在某个时刻被杀死,但我不知道如何通过线;重定向不起作用,因为它一直等到命令完成...

标签: batch-file cmd


【解决方案1】:

你不能停止dir,但你可以使用另一种方法:

for /r "c:\" %%i in (excel.exe) do (echo -- %%i & goto :eof)

【讨论】:

  • 你的意思是*excel.exe 喜欢OP?
  • 这给了我很多输出,因为我在脚本中使用了StdOut.ReadAll() 方法。
  • for /r 即使在达到goto :EOF 之后也会继续循环。它停止输出匹配,但硬盘活动继续。我测试了for /Rdir /s /bforfiles /swhere /r。我仍在寻找一种在第一场比赛后递归和中断的方法,但它可能涉及goto 循环。 OP 的具体问题的最佳解决方案可能是检查注册表以确定 Office 的安装位置,但我仍然很好奇找到递归问题的解决方案。
  • 我已经设法让它工作,正如@aschipfl 指出的那样,它缺少星号。它的运行速度比 DIR 快很多,所以我将其作为答案。干杯!
  • @MacroMan 由于硬盘缓存,它可能运行得更快。下次重新启动后,它可能会再次爬网。不过,这可能是最好的解决方案。 goto 循环比让for /R 完成循环要慢。
【解决方案2】:

到目前为止,这是我发现的最快的方法。

运行此命令以获取位置...(比 dir 快得多)

where /r %systemdrive% inventor.exe

如果你真的想使用输出运行这个...

where /r %systemdrive% inventor.exe > %userprofile%\loctest.txt

然后运行它来设置你想要使用的变量。 注意:(如果您是手动运行而不是在 .bat 或 .cmd 中运行,请记住仅使用 1%)

for /f "tokens=*" %%G in (%userprofile%\loctest.txt) do (set testvar=%%G)

然后您可以运行 echo %testvar% 来查看值...

Here is what is looks like from the command line

【讨论】:

    【解决方案3】:

    我来到这个聊天室是为了寻找一种方法来 cd 到具有给定部分名称的目录;根据上面斯蒂芬的建议,使用批处理文件似乎对我很有效: 在 cww.bat::

    for /D /r "." %%i in (*%1*) do (cd %%~pfxi & goto :eof)
    

    【讨论】:

      猜你喜欢
      • 2018-09-15
      • 2021-10-08
      • 2012-10-04
      • 1970-01-01
      • 2016-06-09
      • 2012-12-25
      • 2022-01-15
      • 1970-01-01
      • 2018-11-22
      相关资源
      最近更新 更多