如何单独验证批处理中是否存在某些文件

时间:2018-02-04 20:02:02

标签: batch-file

我的批处理有问题。我希望批处理单独验证特定路径中是​​否存在某些文件。 代码中的问题是第一个“如果存在...”运行正常,但第二个“如果存在”没有运行,发出快速错误并关闭cmd。出现的错误是“它不期望\ Novell \ Zenworks \ bin \ ZenUserDaemon.exe在这一刻”。 有问题的代码是:

@echo off
if exist "c:\Program Files (x86)\Novell\ZENworks\esm\ZESUser.exe" (
    echo El archivo ZESUser.exe EXISTE
    echo El archivo ZESUser EXISTE >> C:\Soft\zenworks.log
    tasklist | find "ZESUser.exe" || start C:\"Program Files (x86)"\Novell\ZENworks\esm\ZESUser.exe
    tasklist | find "ZESUser.exe" && echo ZESUser.exe en EJECUCION
) else (
    echo El archivo ZESUser.exe NO EXISTE
    echo El archivo ZESUser.exe NO EXISTE >> C:\Soft\zenworks.log
)

if exist "c:\Program Files (x86)\Novell\ZENworks\bin\ZenUserDaemon.exe" (
    echo El archivo ZenUserDaemon.exe EXISTE
    echo El archivo ZenUserDaemon.exe EXISTE >> C:\Soft\zenworks.log
    tasklist | find "ZenUserDaemon.exe" || start C:\"Program Files (x86)"\Novell\ZENworks\bin\ZenUserDaemon.exe
    tasklist | find "ZenUserDaemon.exe" && echo ZenUserDaemon.exe en EJECUCION
) else (
    echo El archivo ZenUserDaemon.exe NO EXISTE
    echo El archivo C:\Program Files (x86)\Novell\ZENworks\bin\ZenUserDaemon.exe NO EXISTE >> C:\Soft\zenworks.log  
)

我试图修改代码以发现问题所在,我发现这个代码同时运行“如果存在”,但我不明白为什么当我插入“tasklist ....”时它没有' t在第一段代码运行。

运行的代码是:

@echo off
if exist "c:\Program Files (x86)\Novell\ZENworks\esm\ZESUser.exe" (
    echo El archivo ZESUser.exe EXISTE >> c:\soft\zenworks.log
    echo El archivo ZESUser.exe EXISTE      
) else (
 echo El archivo ZESUser.exe NO EXISTE >> c:\soft\zenworks.log
 echo El archivo ZESUser.exe NO EXISTE        
)
if exist "c:\Program Files (x86)\Novell\ZENworks\bin\ZenUserDaemon.exe" (
    echo El archivo ZenUserDaemon.exe EXISTE >> c:\soft\zenworks.log
    echo El archivo ZenUserDaemon.exe EXISTE        
) else (
    echo El archivo ZenUserDaemon.exe NO EXISTE >> c:\soft\zenworks.log
    echo El archivo ZenUserDaemon.exe NO EXISTE
)

我做错了什么?

2 个答案:

答案 0 :(得分:0)

在最顶层的代码示例中,x86)上的右括号会过早地从else (条件结束左括号。因此,应使用插入符 ^ 进行转义。

echo El archivo C:\Program Files (x86^)\Novell\ZENworks\bin\ZenUserDaemon.exe NO EXISTE>> C:\Soft\zenworks.log

以下是改进编码风格的重写示例:

@Echo Off
Set "ZU=%ProgramFiles(x86)%\Novell\ZENworks\esm\ZESUser.exe"
Set "ZUD=%ProgramFiles(x86)%\Novell\ZENworks\bin\ZenUserDaemon.exe"
Set "Log=C:\Soft\zenworks.log"

For %%A In ("%ZU%" "%ZUD%") Do (If Exist %%A (Echo El archivo %%~nxA EXISTE
        Echo El archivo %%~nxA EXISTE>>"%Log%"
        TaskList | Find /I "%%~nxA" >Nul && (Echo %%~nxA en EJECUCION
        ) || Start "" %%A) Else (Echo El archivo %%~nxA NO EXISTE
        Echo El archivo %%~nxA NO EXISTE>>"%Log%"))

Pause

请阅读FindStart命令的帮助以获取使用信息:Find /?Start /?。此外,您还可以查看Set /?For /?

答案 1 :(得分:0)

我调试了代码,问题出在最后一行。

echo El archivo C:\Program Files (x86)\Novell\ZENworks\bin\ZenUserDaemon.exe NO EXISTE >> C:\Soft\zenworks.log

路径语法在第二个“if exist ... else”的echo命令中拼写错误。我应该写:

echo El archivo "C:\Program Files (x86)\Novell\ZENworks\bin\ZenUserDaemon.exe" NO EXISTE >> C:\Soft\zenworks.log

谢谢大家的帮助。