Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Ошибка работы скрипта (Непредвиденное появление: and)

Ответить
Настройки темы
CMD/BAT - [решено] Ошибка работы скрипта (Непредвиденное появление: and)

Аватара для sunnykey

Пользователь


Сообщения: 124
Благодарности: 47

Профиль | Отправить PM | Цитировать


Здравствуйте, написал батник такого содержания:
Код: Выделить весь код
title TimeSync  
if "%1"=="" (goto :error)  
reg import %1  
net stop w32time && net start w32time  
w32tm /resync /rediscover  
echo Start time test  
rem Ip-адрес является эталоном времени (то есть с кем сравнивать)  
rem делаем 4 сравнения  
w32tm /stripchart /computer:192.168.1.1 /samples:4  
echo End  
goto :last  
:error  echo No reg file was accpted!  
:last   pause
Через параметр подаётся файл реестра. Если запустить без параметров, скрипт отработает как положено. Однако при запуске с reg-файлом, вываливается ошибка
Непредвиденное появление: and
В чём ошибка?
P.S. Без if скритп правильно работает

Отправлено: 07:13, 20-02-2012

 

Пользователь


Сообщения: 78
Благодарности: 14

Профиль | Отправить PM | Цитировать


Цитата:
Непредвиденное появление: and
if "%1"=="" (goto :error) тут уберите кавычки с %1. А когда будете ему передовать путь\файл реестра, передовайте в кавычках.
К примеру:
Код: Выделить весь код
C:\Documents and Settings\admin>TimeSync.bat "C:\Documents and Settings\admin\Рабочий стол\import.reg"
Это сообщение посчитали полезным следующие участники:

Отправлено: 13:10, 20-02-2012 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата DesmondTruman:
if "%1"=="" (goto :error) тут уберите кавычки с %1. »
Неправильный подход. Кавычки тут нужны и обязательны. Просто нужно приучиться использовать не просто кавычки «"%1"», а «"%~1"».

А для проверки факта, был ли передан параметр (плюс — проверки существования, если это путь) я предпочитаю использовать иной подход:
Код: Выделить весь код
@echo off
setlocal enableextensions enabledelayedexpansion

set sParam=%~1

if defined sParam (
	if exist "%sParam%" (
		echo Working here with parameter [%sParam%]
	) else (
		echo Path [%sParam%] not found
	)
) else (
	echo Usage: "%~nx0" ^<Path to file^>
)


endlocal
exit /b 0

Последний раз редактировалось Iska, 20-02-2012 в 17:46.

Это сообщение посчитали полезным следующие участники:

Отправлено: 17:40, 20-02-2012 | #3


Аватара для sunnykey

Пользователь


Сообщения: 124
Благодарности: 47

Профиль | Отправить PM | Цитировать


Цитата Iska:
Неправильный подход. Кавычки тут нужны и обязательны. Просто нужно приучиться использовать не просто кавычки «"%1"», а «"%~1"». »
Без кавычек программа отработала правильно. Возникает сразу вопрос: зачем нужна тильда? Я скрипты учусь писать по книжке Станека, там почему-то я не увидел, чтобы он у параметров тильду ставил. Прошу объяснить, либо ссылку дать где это прописано.

-------
cmd умри, powershell живи=)
Powershel 4.0 microsoft.com/ru-ru/download/details.aspx?id=40855


Отправлено: 03:46, 21-02-2012 | #4


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


sunnykey, дело в том, что передаваемый в пакетный файл параметр, содержащий символы-разделители (например, пробел — банальный случай для путей), должен быть заключён в кавычки. В противном случае заключать параметр в кавычки не обязательно (но можно).

Пример:
Код: Выделить весь код
"Sample.cmd" C:\boot.ini "c:\CONFIG.SYS" "C:\Program Files\Common Files\Microsoft Shared"
Параметры «C:\boot.ini» и «c:\CONFIG.SYS» не содержат символов-разделителей, потому их можно заключать в кавычки, а можно и не заключать (в примере «C:\boot.ini» не заключён в кавычки, а «c:\CONFIG.SYS» — заключён). Параметр же «C:\Program Files\Common Files\Microsoft Shared» содержит символы-разделители (в данном случае — пробел) и, чтобы он был воспринят как один параметр, а не несколько — требуется заключить его в кавычки.

Идём дальше. В отличие от ряда языков, в пакетный файл параметры передаются «как есть» — вместе с кавычками (если они были). И это надо учитывать при работе пакетного файла. И вот как раз для того, чтобы иметь возможность унифицировать обработку параметров, как заключённых в кавычки, так и без них — используется тильда:
Код: Выделить весь код
"%~1"
То есть, сначала мы, при помощи тильды, убираем возможные кавычки у переданного параметра, а затем уже сами указываем кавычки. Таким образом, независимо от того, был ли передан параметр с кавычками или без — теперь мы гарантированно получим его унифицированное представление — с кавычками.

Цитата sunnykey:
Я скрипты учусь писать по книжке Станека, там почему-то я не увидел, чтобы он у параметров тильду ставил. »
Мне сложно сказать, отчего Станек обошёл своим вниманием данный вопрос совершенно. Про «defined», во всяком случае, он не забыл.

P.S. Про параметры и тильду:
Код: Выделить весь код
call /?
Это сообщение посчитали полезным следующие участники:

Отправлено: 05:54, 21-02-2012 | #5



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Ошибка работы скрипта (Непредвиденное появление: and)

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Проблема работы скрипта в Windows 7 Oleg48 Скриптовые языки администрирования Windows 4 23-06-2011 15:09
Приостановка работы скрипта до нажатия кнопки в программе Pependos AutoIt 0 01-10-2010 02:52
Принцип работы скрипта Elastic Trail.au3 ShogenOFF AutoIt 5 20-08-2010 22:48
Как уменьшить время работы php скрипта? buhanov Вебмастеру 5 15-08-2008 22:21
Как вывести результат работы скрипта lehha Вебмастеру 6 14-11-2003 12:59




 
Переход