Войти

Показать полную графическую версию : [решено] Ошибка в синтаксисе команды


User001
21-06-2014, 07:08
Не могу найти вышеупомянутую ошибку. В коротком батнике: @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).

gora
21-06-2014, 13:34
Попробуйте так:

@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

User001
23-06-2014, 07:26
Попробуйте так »Работать-то работает, только мне интересно, где ошибка синтаксическая. Учитывая, что вариант без проверки разрядности и определена ли переменная, хоть и не красиво, но работает также.

gora
23-06-2014, 07:51
где ошибка синтаксическая »
Переменной %programfiles(x86)% на XP x86 не существует и она не раскрывается в определенный путь. Кроме этого имя переменной содержит скобки.
Такая не раскрывающаяся переменная помещенная в строку:if defined %programfiles(x86)% (вызывает синтаксическую ошибку на х86 системах.

Iska
23-06-2014, 08:20
Там ещё интереснее — в «if defined Var» не нужно раскрывать переменную, т.е. обрамлять её символами раскрытия («%» или «!»).

User001
23-06-2014, 09:15
вызывает синтаксическую ошибку на х86 системах »Проблема в том, что в cmd не вызвает и, более того, даже работает как надо (условие ложно).
Там ещё интереснее — в «if defined Var» не нужно раскрывать переменную, т.е. обрамлять её символами раскрытия («%» или «!»). »Вовремя :)
Переменной %programfiles(x86)% на XP x86 не существует и она не раскрывается в определенный путь »Так в чем смысл defined тогда? Я как раз и думал, чтобы проверять "объявленность" переменной.

Iska
23-06-2014, 20:00
«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
както так

User001
24-06-2014, 05:22
И еще - какие-то расширенные средства для написания / отладки батников бывают (ну, кроме подсветки синтаксиса :) ).
Например, благодаря коду Iska, познакомился с SetLocal и расширенная обработка команд (http://www.cyberforum.ru/cmd-bat/thread940954.html).

Iska
24-06-2014, 08:39
У меня это «echo» и «rem», вставляемый перед «@echo off».




© OSzone.net 2001-2012