Ошибка в синтаксисе команды
Не могу найти вышеупомянутую ошибку. В коротком батнике:
читать дальше »
Код:
@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
|
Работать-то работает, только мне интересно, где ошибка синтаксическая. Учитывая, что вариант без проверки разрядности и определена ли переменная, хоть и не красиво, но работает также.
|
Цитата:
Цитата User001
где ошибка синтаксическая »
|
Переменной %programfiles(x86)% на XP x86 не существует и она не раскрывается в определенный путь. Кроме этого имя переменной содержит скобки.
Такая не раскрывающаяся переменная помещенная в строку:
Код:
if defined %programfiles(x86)% (
вызывает синтаксическую ошибку на х86 системах.
|
Там ещё интереснее — в «if defined Var» не нужно раскрывать переменную, т.е. обрамлять её символами раскрытия («%» или «!»).
|
Цитата:
Цитата gora
вызывает синтаксическую ошибку на х86 системах »
|
Проблема в том, что в cmd не вызвает и, более того, даже работает как надо (условие ложно).
Цитата:
Цитата Iska
Там ещё интереснее — в «if defined Var» не нужно раскрывать переменную, т.е. обрамлять её символами раскрытия («%» или «!»). »
|
Вовремя :)
Цитата:
Цитата gora
Переменной %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
|
Код:
@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 и расширенная обработка команд.
|
У меня это «echo» и «rem», вставляемый перед «@echo off».
|
Время: 11:11.
© OSzone.net 2001-