Batch file 正在搜索文件,但可能需要超时

Batch file 正在搜索文件,但可能需要超时,batch-file,Batch File,我有一个程序来搜索特定文件的驱动器。唯一的问题是我不知道它开的是什么。当它在一个驱动器中搜索一个不存在的文件时,就会出现问题。比如说,10秒钟后,如果没有办法转到下一个驱动器,就会出现问题。这是到目前为止我的密码 @echo off setlocal EnableDelayedExpansion set count=1 for /f "skip=1" %%a in ('wmic logicaldisk get caption') do ( set drive!count!=

我有一个程序来搜索特定文件的驱动器。唯一的问题是我不知道它开的是什么。当它在一个驱动器中搜索一个不存在的文件时,就会出现问题。比如说,10秒钟后,如果没有办法转到下一个驱动器,就会出现问题。这是到目前为止我的密码

    @echo off


setlocal EnableDelayedExpansion

 set count=1
 for /f "skip=1" %%a in ('wmic logicaldisk get caption') do (
  set drive!count!=%%a
  set /a count+=1
)

set "gh=!drive1!"
::Change this to do whatever with the variables
set "fh=!drive2!"
set "hh=!drive3!"
set "jh=!drive4!"

For /R %gh%\ %%G IN (*.ut2) do set jk="%%~dpG"
if defined jk (
echo %jk%
) else (
goto next
)

for /r %jk% %%a in (*) do if "%%~nxa"=="CTF-Hydro-16-2k3.ut2" set  k=%%~dpnxa
if defined k (
echo %k% found
pause
cls
echo You have it
goto end
) else (
echo Map not found
copy %CD:~0,3%\Unrealmap\CTF-Hydro-16-2k3.ut2 %jk%
goto end
)

:next

For /R %fh%\ %%G IN (*.ut2) do set ht="%%~dpG"
if defined ht (
echo %ht%
) else (
goto there
)

for /r %ht% %%a in (*) do if "%%~nxa"=="CTF-Hydro-16-2k3.ut2" set m=%%~dpnxa
if defined k (
echo %m% found
pause
cls
echo You have it
goto end
) else (
echo Map not found
copy %CD:~0,3%\Unrealmap\CTF-Hydro-16-2k3.ut2 %jk%
goto end

:there
:end
cls
echo done
pause
尝试下一种方法:

@ECHO OFF >NUL
SETLOCAL enableextensions
set /A "ii=0"
for /f "skip=1" %%D in ('
    wmic logicaldisk get caption
    ') do for /F %%d in ("%%D") do (
  echo searching %%d
  for /F "delims=" %%G IN ('dir /B /S "%%d\CTF-Hydro-16-2k3.ut2" 2^>nul') do (
    set /A "ii+=1"
    set "k=%%G"
    rem remove 'rem' from next line to discontinue searching 
    rem goto :testfound
  )
  TIMEOUT /T 10 /NOBREAK >NUL
)
:testfound
if %ii% EQU 0 (
  echo Map not found
) else (
  echo Map found %ii% times: last one "%k%"
)
这里是针对
wmic
命令的
for
循环

  • %%D
    检索
    标题
  • %%d
    删除返回值中的结束回车:
    wmic
    行为:每个输出行以
    0x0D0D0A
    )结束,而不是普通的
    0x0D0A
看戴夫·本汉姆的

另一种可能性:解析

wmic datafile where "Extension='ut2' and FileName='CTF-Hydro-16-2k3'" get Name 2>NUL
尝试下一种方法:

@ECHO OFF >NUL
SETLOCAL enableextensions
set /A "ii=0"
for /f "skip=1" %%D in ('
    wmic logicaldisk get caption
    ') do for /F %%d in ("%%D") do (
  echo searching %%d
  for /F "delims=" %%G IN ('dir /B /S "%%d\CTF-Hydro-16-2k3.ut2" 2^>nul') do (
    set /A "ii+=1"
    set "k=%%G"
    rem remove 'rem' from next line to discontinue searching 
    rem goto :testfound
  )
  TIMEOUT /T 10 /NOBREAK >NUL
)
:testfound
if %ii% EQU 0 (
  echo Map not found
) else (
  echo Map found %ii% times: last one "%k%"
)
这里是针对
wmic
命令的
for
循环

  • %%D
    检索
    标题
  • %%d
    删除返回值中的结束回车:
    wmic
    行为:每个输出行以
    0x0D0D0A
    )结束,而不是普通的
    0x0D0A
看戴夫·本汉姆的

另一种可能性:解析

wmic datafile where "Extension='ut2' and FileName='CTF-Hydro-16-2k3'" get Name 2>NUL