Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 如何在本地驱动器中搜索是否存在目录?_Windows_Batch File - Fatal编程技术网

Windows 如何在本地驱动器中搜索是否存在目录?

Windows 如何在本地驱动器中搜索是否存在目录?,windows,batch-file,Windows,Batch File,我试图找出如何确定Windows 2008计算机的任何本地驱动器上是否存在目录“\Program Files(x86)\Apache Software Foundation\Apache2.2” 我想应该是这样的: for /f "skip=2 tokens=2 delims=," %%A in ( 'wmic logicaldisk get name /format:csv' ) DO ( echo %%A IF EXIST "%%A\Program Files (x86)\Apac

我试图找出如何确定Windows 2008计算机的任何本地驱动器上是否存在目录“\Program Files(x86)\Apache Software Foundation\Apache2.2”

我想应该是这样的:

for /f "skip=2 tokens=2 delims=," %%A in (
 'wmic logicaldisk get name /format:csv'
) DO (
  echo %%A
  IF EXIST "%%A\Program Files (x86)\Apache Software Foundation\Apache2.2" (
    echo FOUND ON %%A
  )
)
但它只是呼应了驱动器号

我是一个Unix的家伙,因为这个特殊的项目而被困在Windows世界中,请帮助我


我从一位同事那里得到了一些帮助,下面是如何解决的:

SET FOUNDIT=FALSE
SET ERRORLEVEL=

FOR /F "skip=2 tokens=2 usebackq delims=," %%i IN (
    `wmic logicaldisk where "drivetype=3" get name^,size /format:csv`
) DO (
    if /i "%foundit%" equ "true" exit /b
    CALL :APACHE %%i
    if %ERRORLEVEL% equ 0 set FOUNDIT=TRUE
)

IF %FOUNDIT% equ "TRUE" exit /B ELSE exit /B 1

:APACHE
    set DRIVE=%1
    REM echo DRIVE is %DRIVE%
    if "%DRIVE%" equ "" exit /B
    set APACHEPATH=%DRIVE%\Program Files (x86)\Apache Software Foundation\Apache2.2
    IF EXIST "%APACHEPATH%" CALL :FOUNDIT "%APACHEPATH%"

    exit /B

:FOUNDIT
    echo FOUND APACHE on %1
    for /f "tokens=*" %%x in (%1) do set APACHEINSTALLDIR=%%x
    set FOUNDIT=TRUE
    exit /B

谢谢你的帮助

wmic有一个丑陋的行为:它不能写入正确的换行符,因此如果使用最后一个标记,就会遇到问题

解决方法:不要使用最后一个令牌(或强制它添加另一个您不使用的令牌,此处为
size
)。由于您没有使用最后一个标记,因此它没有正确结束并不重要

for /F "skip=2 tokens=2 delims=," %A in ('wmic logicaldisk where "drivetype=3" get name^,size /format:csv') DO (
(你必须避开逗号)


我添加了
其中的“drivetype=3”
,因此它只会检查硬盘(没有CD/DVD/Flash),但您可以省去这一点。

另一种方法比
WMIC
方法更简单、更安全、更快:

for %%a 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 (
if exist %%a: (
  IF EXIST "%%a:\Program Files (x86)\Apache Software Foundation\Apache2.2\" (
     echo FOUND ON [%%a:])))

带空格的路径需要用引号括起来,
“%%A\Program Files(x86)\Apache Software Foundation\Apache2.2”
我刚刚更新了代码,将IF-EXIST文件路径用引号括起来,但它只是回显了%%A,IF EXISTS找不到存在的目录。请编写
echo-%%A-
而不是
echo%%A
,然后查看目录。。。删除任何
echo off
以更清晰地查看它。下载Cygwin并访问一个愉快的地方我不希望我可以直接下载Cygwin,但这支持整个公司的Windows服务器上的一些构建过程。更快?大概但它多次要求我“插入磁盘”。感谢您的输入,这对解决方案很有帮助。