0

很长一段时间以来,我一直在努力通过这些船员批处理 cmds。

我需要搜索文件(实际上是某些软件的安装文件夹(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")

谢谢。

4

1 回答 1

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 或者,如果您不想显示时间和日期,请将 type 行替换为:

@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

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

type tmp.txt | sort /R

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

于 2012-08-29T05:39:33.160 回答