2013-04-20 106 views
-1

我的目标是在C:\驱动器的ANY目录中搜索名为“setup95.exe”的文件,但不搜索这些目录的目录 - 。如果文件存在,那么我需要将路径写入名为%getpath%的变量。MS-DOS批处理:在目录中搜索非递归文件

我最初试图简单地使用dir,但它不符合我的期望。我需要获取C:\中的任意目录并搜索它。作为一个示例,假设我在C:\中有一个文件夹,名为__neverhood。在该文件夹中有一个名为setup95.exe的文件。该程序不知道它是什么文件夹。它只知道它在C:\中,因此需要搜索C:\中的每个目录以查找setup95.exe

更新:新代码。它找到该文件,但对磁盘驱动器没有好处。下面的代码的摘录:

@ECHO OFF 
SETLOCAL 
SET "traversity=C:\Program Files (x86)\" 
if not exist "C:\Program Files (x86)" SET "traversity=C:\Program Files\" 

SET intricacy=%traversity%The Neverhood Restoration Project 
SET obscurity=%traversity%DreamWorks Interactive 
SET psychedelia=%obscurity%\Neverhood 
SET abstraction=WAVistaWin7.exe 

:removenrp 
if exist "%traversity%The Neverhood Restoration Project Julia\unins000.exe" ( 
    "%traversity%The Neverhood Restoration Project Julia\unins000.exe" 
) 

:delreg 
if %PROCESSOR_ARCHITECTURE%==x86 ( 
    reg delete "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\DreamWorks Interactive" /f 
) else ( 
    if %PROCESSOR_ARCHITECTURE%==AMD64 ( 
     reg delete "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\DreamWorks Interactive" /f 
    ) else (
     reg delete "HKEY_LOCAL_MACHINE\SOFTWARE\DreamWorks Interactive" /f 
)) 

if exist "%obscurity%" echo y | rmdir /S /Q "%obscurity%" 


mkdir "%obscurity%" 
mkdir "%psychedelia%" 
copy /Y "%~dp0%abstraction%" "%psychedelia%" 
for /d %%a in (c:\*) do for /f "delims=" %%i in ('dir /b /a-d "%%~a\setup95.exe" 2^>nul') do set "getpath=%%~a" 
if defined getpath (echo path is %getpath%) else rem ok 

if exist "%getpath%setup95.exe" (
    echo MSGBOX "Pyroneous did not distribute the Neverhood illicitly to you. Remember that the only legal way to run the Neverhood is to buy it. We will still permit you to install the Neverhood, but we are not responsible for your actions. You can read our full purposes at theneverhood.sourceforge.net. Thanks!" > %temp%\TEMPmessage.vbs 
    call %temp%\TEMPmessage.vbs 
    del %temp%\TEMPmessage.vbs /f /q 
    reg import "%~dp0neverhood.reg" 
    START "%getpath%setup95.exe" 
) else (
    for %%D in (a b c d e f g h i j k l m n o p q r s t u v w x y z) do vol %%D: >output 2>output && if exist %%D:\setup95.exe set DRIVE=%%D 
    if not defined DRIVE echo It appears you don't have the Neverhood on your computer. Please check http://theneverhood.sourceforge.net/setup/ for more information. && pause 
    if exist "%DRIVE%:\setup95.exe" (
     echo MSGBOX "Hey. Thank you for purchasing the Neverhood. That is, if you're not using an burned ISO/exploitation." > %temp%\TEMPmessage.vbs 
     call %temp%\TEMPmessage.vbs 
     del %temp%\TEMPmessage.vbs /f /q 
     reg import "%~dp0neverhood.reg" 
     START D:\setup95.exe 

) )

输出返回此:

C:\Users\b\Desktop\somnacea\files\thankyousanta\necessity>install.bat 
ERROR: The system was unable to find the specified registry key or value. 
The process tried to write to a nonexistent pipe. 
     1 file(s) copied. 
The process cannot access the file because it is being used by another process. 
The process cannot access the file because it is being used by another process. 
It appears you don't have the Neverhood on your computer. Please check http://th 
eneverhood.sourceforge.net/setup/ for more information. 
Press any key to continue . . . 

回答

0

可悲的是,你的问题是都不清晰。一个例子会很好。

您是否在问如何检测上述文件是否存在于您提名的目录中,或者是否存在特定文件?

@ECHO OFF 
SETLOCAL 
:: version 1 - if you want to specify the drive and path and file 
FOR /f %%i IN ("%~1") DO IF EXIST "%%i" (SET getpath=%%~pi) ELSE (SET getpath=) 
ECHO (1) getpath=%getpath% 

:: version 2 - if you want to specify path and assume drive and file 
FOR /f %%i IN ("c:\%~1\setup95.exe") DO IF EXIST "%%i" (SET getpath=%%~pi) ELSE (SET getpath=) 
ECHO (2) getpath=%getpath% 

"c:\directory I\want to\find\setup95.exe"参数运行此应与第一个版本的工作(getpath设定的路径,如果该文件存在,否则为空)

"\directory I\want to\find"参数运行此应与第二工作版本(getpath设置为路径,如果文件存在,否则为空)

但是 - 如果您已经知道您的路径是什么,为什么不简单地使用if exist "c:\path I want\to know\about\setup95.exe"

如果你不知道,你是什么意思"ANY directory in the C:\ drive--but not the directories of those directories"


赋予了更多的数据:

@ECHO OFF 
SETLOCAL 
SET "getpath=" 
FOR /f "delims=" %%i IN ('dir /s /b /a-d c:\setup95.exe' 
) DO IF DEFINED getpath (ECHO also found IN %%~pi) ELSE (SET getpath=%%~pi) 
IF DEFINED getpath (ECHO first found AT %getpath%) ELSE (ECHO NOT found) 

应该显示首位发现,在更多的地方是否发现还是发现在所有。