我的批处理有问题。我希望批处理单独验证特定路径中是否存在某些文件。 代码中的问题是第一个“如果存在...”运行正常,但第二个“如果存在”没有运行,发出快速错误并关闭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
)
我做错了什么?
答案 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
请阅读Find
和Start
命令的帮助以获取使用信息: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
谢谢大家的帮助。