![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Название целевой директории в формате DOS [D5, WinXP]
harisma © (2009-12-17 15:07:00)Возникла необходимость запуска одного из SQL скриптов через командную строку, используя OSQL (SQLCMD для SQL2005). Проблема в том, что сам OSQL принимает скрипт как параметр (в обрамлении двойных кавычек) и в скрипте также есть двойные кавычки, обрамляющие целевую директорию (которая содержит в себе пробел - потому и возникает необходимость в кавычках). Поэтому текст скрипта для OSQL получается обрезаным и соответственно скрипт не выполняется.
Если же целевую директорию представить в формате ДОС, то все в порядке - кавычки ставить не надо и скрипт корректно отрабатывает.
Так вот вопрос: как имея название директории с пробелами узнать, как она будет выглядеть в формате ДОС.
Для облегчения пнимания всего вышенаписанного представляю рабочий и нерабочий варианты командной строки:
Нерабочий:
"C:\Program Files\Microsoft SQL Server\90\Tools\Binn\SQLCMD.EXE" -E -S dev-3\SQL2005 -Q "EXECUTE master.dbo.xp_sqlmaint '-D 2008_empty -VrfyBackup -BkUpMedia DISK -BkUpDB "E:\Databases Backup Folder" -BkExt BAK -WriteHistory'"
Рабочий:
"C:\Program Files\Microsoft SQL Server\90\Tools\Binn\SQLCMD.EXE" -E -S dev-3\SQL2005 -Q "EXECUTE master.dbo.xp_sqlmaint '-D 2008_empty -VrfyBackup -BkUpMedia DISK -BkUpDB E:\Databa~1 -BkExt BAK -WriteHistory'"
Примечание: советы типа "этот скрипт можно всунуть в сам SQL" не принимаются, поскольку данная задача планируется выполняться для SQL2008 ExpressEdition, у которого нет SQLServerAgent.
Leonid Troyanovsky (2009-12-21 19:21:00) [1]
> harisma © (21.12.09 17:46) [9]
> Вот теперь спасибо за внятный обстоятельный и понятный ответ
> :)
Осталось непонятным, что ж из всего этого было ранее непонятным.
--
Regards, LVT.
harisma (2009-12-21 17:46:00) [2]Вот теперь спасибо за внятный обстоятельный и понятный ответ :)
sniknik (2009-12-21 17:37:00) [3]> Мне не список знающих нужен
а зачем тогда вопрос "кто знает?"?
> Что надо в строке параметров изменить
нужно понимать, что передаваемую строку последовательно преобразовывают... и в зависимости от программы это могут быть разные преобразования, программа "внешняя" получает от тебя "сырец" строки, преобразует и передаст дальше внутренней программе. внутренняя будет работать если после этих преобразований получат валидную со своей точки зрения строку...
типа ты пишешь в дельфи "111222111", суть строка без кавычек, но в дельфи ты ее ими обозначаешь. передав куда нибудь там будет строка 111222111, если тебе нужно чтобы та программа получила с кавычками то нужно их внести в строку """111222111""", вот, это в дельфи будет суть "111222111", и передастся тоже она, но если та программа передает дальше аналогичному парсеру (т.е. тоже обозначает строки кавычками) та получит 111222111... опять, а ждет чего то с обозначениями строк.
в общем возьми в руки бумажку, карандаш и посчитай, что на каком этапе получается и сравни с тем что там нужно.
harisma (2009-12-21 15:00:00) [4]To sniknik:
>ну, как бы, я догадываюсь...
Мне не список знающих нужен, а решение проблемы.
Что надо в строке параметров изменить, чтобы работало и с sqlcmd.exe и с osql.exe (так как sqlcmd - это расширенная версия osql, но появилась только в SQL 2005)?
sniknik (2009-12-21 14:36:00) [5]> Кто знает?
ну, как бы, я догадываюсь... или тебе список знающих нужен?
harisma (2009-12-21 13:53:00) [6][4] Спасибо за подсказку - так работает. Только почему такая конструкция не работает с программой OSQL.exe? Кто знает?
sniknik (2009-12-17 22:27:00) [7]> Двойные кавычки нельзя
почему это нельзя?
"C:\Program Files\Microsoft SQL Server\90\Tools\Binn\SQLCMD.EXE" -E -S dev-3\SQL2005 -Q "EXECUTE master.dbo.xp_sqlmaint '-D 2008_empty -VrfyBackup -BkUpMedia DISK -BkUpDB ""E:\Databases Backup Folder"" -BkExt BAK -WriteHistory'"
должно работать
harisma (2009-12-17 16:03:00) [8]> или просто папку бэкапов назвать попроще?
Нельзя, потому как папку указывает пользователь, а не зашивается жестко разработчиком.
>а закавычить путь не помогает?
Что имеется ввиду? Двойные кавычки нельзя, одинарные - тот же эффект - скрипт не выполнится.
Медвежонок Пятачок (2009-12-17 15:15:00) [9]а закавычить путь не помогает?
или просто папку бэкапов назвать попроще?
Германн (2009-12-17 15:13:00) [10]GetShortPathName не поможет?