【问题标题】:Searching all the existance of particular file with Batch使用批处理搜索特定文件的所有存在
【发布时间】:2012-08-27 15:35:57
【问题描述】:

我在很长一段时间内都在努力通过这些批量批处理命令。

我需要搜索文件(实际上是某些软件的安装文件夹(XYZ)(我知道有一种方法可以在注册表中检查) 但我想要一种简单的方法来检查一些 ABC.cmd 文件;如果存在,请给我该文件的路径;

但问题是该文件也存在于各个地方并给了我错误的答案。

有人可以告诉我,它可以在最短的时间内给我所有文件的存在,然后我可以选择我想用批处理脚本选择的文件。

这是我当前的代码,但它给出的是它找到的第一个代码,而不是我想要的代码:

@echo  off 
FOR /f "Tokens=*" %%i in ('DIR \stDesign.cmd /B /S /a-d') do (set PATH="%%~dpi")
FOR /f "Tokens=*" %%i in ('DIR \stDesign.cmd /od /b /S') do (set URL="%%~dpi")

谢谢。

【问题讨论】:

    标签: windows scripting batch-file cmd


    【解决方案1】:

    好吧,首先/a-d/od 不是dir 的开关。我相信你的意思分别是/a:d/o:d

    除了这些错误之外,您的第一个 for 语句不起作用的原因是 DIR \stDesign.cmd /B /S /a:d 正在搜索名为 stDesign.cmd目录*,而不是文件.

    您的第二个for 声明告诉DIR 按创建日期对文件进行排序,但这仅适用于相同目录中的文件,而不适用于跨目录。这意味着同一目录中的任何匹配文件都将按日期排序,但存在于单独目录中的文件将按DIR 找到它们的顺序排列。

    试试

    @echo off
      echo.
      REM Housekeeping: Delete any existing files left-over from previous runs
      if exist "%tmp%\~.tm?" del "%tmp%\~.tm?"
    
      REM Find the files
      for %%v in (*.bat) do (
    
        REM Extract Date, Time, Path, File Name, and Extention
        for /f "tokens=1-3* delims=/ " %%w in ("%%~tdpnxv") do ( 
    
          REM Change the date around so that simply sorting the lines
          REM will order them by date and time.
          echo %%y/%%w/%%x %%z>>%tmp%\~.tmp
        )
      )
    
      REM Sort (in ascending order) and Display data
      type "%tmp%\~.tmp" | sort
    
      REM Housekeeping
      del "%tmp%\~.tmp"
    
    echo.
    

    REM 或者,如果您不想显示时间和日期,请将类型行替换为:

    @echo off
      echo.
      REM Housekeeping: Delete any existing files left-over from previous runs
      if exist "%tmp%\~.tm?" del "%tmp%\~.tm?"
    
      REM Find the files
      for %%v in (*.bat) do (
    
        REM Extract Date, Time, Path, File Name, and Extention
        for /f "tokens=1-3* delims=/ " %%w in ("%%~tdpnxv") do ( 
    
          REM Change the date around so that simply sorting the lines
          REM will order them by date and time.
          echo %%y/%%w/%%x %%z>>%tmp%\~.tmp
        )
      )
    
      REM Sort (in ascending order) and save data to ~.tm2
      type "%tmp%\~.tmp" | sort >> "%tmp%\~.tm2"
    
      REM Extract path and file name only from ~.tm2 and display it
      for /f "tokens=4* usebackq" %%x in ("%tmp%\~.tm2") do echo %%x
    
    
      REM Housekeeping
      del "%tmp%\~.tmp"
    
    echo.
    

    第一个例子给出这样的输出:

    1992\01\15 00:12:55 C:\SOMEPATH\FILE0001.EXT
    2004\04\17 00:42:17 C:\ANOTHERPATH\FILE0002.EXT
    2004\04\17 12:42:17 C:\MISCPATH\RANDOM\FILE0003.EXT
    2012\10\15 00:12:55 C:\EXAMPLE\FILE0004.EXT
    2012\01\15 00:12:55 C:\FILE0005.EXT
    

    第二个示例仅显示路径和文件名,但仍按日期+时间排序。

    C:\SOMEPATH\FILE0001.EXT
    C:\ANOTHERPATH\FILE0002.EXT
    C:\MISCPATH\RANDOM\FILE0003.EXT
    C:\EXAMPLE\FILE0004.EXT
    C:\FILE0005.EXT
    

    要反转排序顺序,请使用带有sort 的/R 开关,如下所示:

    type tmp.txt | sort /R
    

    *目录和文件夹是一回事。

    【讨论】:

    • 非常感谢您的努力和解释,非常感谢;我需要所有现有文件的路径并想选择其中一个:-)
    • 我在给出输出时搞砸了,它确实包含路径。我现在会更新我的答案。
    • 打印行号以及每个路径和文件名会很简单,这样您就可以使用set /p choice=Enter a line number to select: 这就是您要找的东西吗?
    • 是的,我希望用户可以从上面给出的结果中进行选择。你能告诉你你在整个 C:\ 或当前目录或整个计算机上搜索的搜索范围是什么?
    • 其实我给你的是编辑后的结果。这就是目录名称是“somepath”和“random”的原因。当我测试它时,我实际上是在搜索 f:\music 和它的子目录(其中有很多),用于存放我散落的 *.bat 文件。你想让我编辑我的答案以包括行号和选择方法吗?
    猜你喜欢
    • 2015-08-15
    • 1970-01-01
    • 2019-09-07
    • 1970-01-01
    • 2011-11-17
    • 1970-01-01
    • 2012-10-07
    • 1970-01-01
    • 2021-04-24
    相关资源
    最近更新 更多