Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Ошибка в синтаксисе команды (http://forum.oszone.net/showthread.php?t=283929)

User001 21-06-2014 07:08 2366771

Ошибка в синтаксисе команды
 
Не могу найти вышеупомянутую ошибку. В коротком батнике:
читать дальше »
Код:

@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 2366864

Попробуйте так:

Код:

@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 2367351

Цитата:

Цитата gora
Попробуйте так »

Работать-то работает, только мне интересно, где ошибка синтаксическая. Учитывая, что вариант без проверки разрядности и определена ли переменная, хоть и не красиво, но работает также.

gora 23-06-2014 07:51 2367355

Цитата:

Цитата User001
где ошибка синтаксическая »

Переменной %programfiles(x86)% на XP x86 не существует и она не раскрывается в определенный путь. Кроме этого имя переменной содержит скобки.
Такая не раскрывающаяся переменная помещенная в строку:
Код:

if defined %programfiles(x86)% (
вызывает синтаксическую ошибку на х86 системах.

Iska 23-06-2014 08:20 2367368

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

User001 23-06-2014 09:15 2367376

Цитата:

Цитата gora
вызывает синтаксическую ошибку на х86 системах »

Проблема в том, что в cmd не вызвает и, более того, даже работает как надо (условие ложно).
Цитата:

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

Вовремя :)
Цитата:

Цитата gora
Переменной %programfiles(x86)% на XP x86 не существует и она не раскрывается в определенный путь »

Так в чем смысл defined тогда? Я как раз и думал, чтобы проверять "объявленность" переменной.

Iska 23-06-2014 20:00 2367561

«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 2367626

Код:

@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 2367701

И еще - какие-то расширенные средства для написания / отладки батников бывают (ну, кроме подсветки синтаксиса :) ).
Например, благодаря коду Iska, познакомился с SetLocal и расширенная обработка команд.

Iska 24-06-2014 08:39 2367740

У меня это «echo» и «rem», вставляемый перед «@echo off».


Время: 11:11.

Время: 11:11.
© OSzone.net 2001-