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

Показать сообщение отдельно

Ветеран


Сообщения: 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