Показать полную графическую версию : [решено] Ошибка в синтаксисе команды
Не могу найти вышеупомянутую ошибку. В коротком батнике: @echo off
if defined %programfiles(x86)% (
if exist "%programfiles(x86)%\Mozilla Firefox\firefox.exe" (
echo Come on...
pause
exit
)
)
echo Come on 2...
pause
Ошибка на XP, построчная копипаста (в учетом пробелов) в cmd проблем не выявляет.
И еще - есть для bat какие-нибудь расширенные средства отладки (хотя бы bash -x).
Попробуйте так:
@echo off
Set xOS=x64& If "%PROCESSOR_ARCHITECTURE%"=="x86" If Not Defined PROCESSOR_ARCHITEW6432 Set xOS=x86
if %xOS%==x64 (
if exist "%programfiles(x86)%\Mozilla Firefox\firefox.exe" (
echo Come on...
pause
exit
)
)
echo Come on 2...
pause
Попробуйте так »Работать-то работает, только мне интересно, где ошибка синтаксическая. Учитывая, что вариант без проверки разрядности и определена ли переменная, хоть и не красиво, но работает также.
где ошибка синтаксическая »
Переменной %programfiles(x86)% на XP x86 не существует и она не раскрывается в определенный путь. Кроме этого имя переменной содержит скобки.
Такая не раскрывающаяся переменная помещенная в строку:if defined %programfiles(x86)% (вызывает синтаксическую ошибку на х86 системах.
Там ещё интереснее — в «if defined Var» не нужно раскрывать переменную, т.е. обрамлять её символами раскрытия («%» или «!»).
вызывает синтаксическую ошибку на х86 системах »Проблема в том, что в cmd не вызвает и, более того, даже работает как надо (условие ложно).
Там ещё интереснее — в «if defined Var» не нужно раскрывать переменную, т.е. обрамлять её символами раскрытия («%» или «!»). »Вовремя :)
Переменной %programfiles(x86)% на XP x86 не существует и она не раскрывается в определенный путь »Так в чем смысл defined тогда? Я как раз и думал, чтобы проверять "объявленность" переменной.
«if defined …» работает без раскрытия. Например, вот так:
if defined FARHOME echo Command processor running under Far Manager.
Или вот так (таким образом я проверяю наличие первого аргумента у командного файла):
@echo off
setlocal enableextensions enabledelayedexpansion
set sSourceFile=%~1
if not defined sSourceFile (
echo Need path to source file.
echo.
echo Usage: %~nx0 ^<Source file^>
exit /b 1
)
endlocal
exit /b 0
kiripanda
23-06-2014, 22:28
@echo off &setlocal enableextensions
set "Var="
if defined Var (echo Defined) else (echo Not defined)
pause
set "Var=Value"
if defined Var (echo Defined) else (echo Not defined)
pause
if defined %Var% (echo Defined) else (echo Not defined)
pause
set "Value=Another Value"
if defined %Var% (echo Defined) else (echo Not defined)
pause
както так
И еще - какие-то расширенные средства для написания / отладки батников бывают (ну, кроме подсветки синтаксиса :) ).
Например, благодаря коду Iska, познакомился с SetLocal и расширенная обработка команд (http://www.cyberforum.ru/cmd-bat/thread940954.html).
У меня это «echo» и «rem», вставляемый перед «@echo off».
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.