Форум: "Основная";
Текущий архив: 2011.07.31;
Скачать: [xml.tar.bz2];
ВнизНазвание целевой директории в формате DOS Найти похожие ветки
← →
harisma © (2009-12-17 15:07) [0]Возникла необходимость запуска одного из 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.
← →
Германн © (2009-12-17 15:13) [1]GetShortPathName не поможет?
← →
Медвежонок Пятачок © (2009-12-17 15:15) [2]а закавычить путь не помогает?
или просто папку бэкапов назвать попроще?
← →
harisma © (2009-12-17 16:03) [3]> или просто папку бэкапов назвать попроще?
Нельзя, потому как папку указывает пользователь, а не зашивается жестко разработчиком.
>а закавычить путь не помогает?
Что имеется ввиду? Двойные кавычки нельзя, одинарные - тот же эффект - скрипт не выполнится.
← →
sniknik © (2009-12-17 22:27) [4]> Двойные кавычки нельзя
почему это нельзя?
"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-21 13:53) [5][4] Спасибо за подсказку - так работает. Только почему такая конструкция не работает с программой OSQL.exe? Кто знает?
← →
sniknik © (2009-12-21 14:36) [6]> Кто знает?
ну, как бы, я догадываюсь... или тебе список знающих нужен?
← →
harisma © (2009-12-21 15:00) [7]To sniknik:
>ну, как бы, я догадываюсь...
Мне не список знающих нужен, а решение проблемы.
Что надо в строке параметров изменить, чтобы работало и с sqlcmd.exe и с osql.exe (так как sqlcmd - это расширенная версия osql, но появилась только в SQL 2005)?
← →
sniknik © (2009-12-21 17:37) [8]> Мне не список знающих нужен
а зачем тогда вопрос "кто знает?"?
> Что надо в строке параметров изменить
нужно понимать, что передаваемую строку последовательно преобразовывают... и в зависимости от программы это могут быть разные преобразования, программа "внешняя" получает от тебя "сырец" строки, преобразует и передаст дальше внутренней программе. внутренняя будет работать если после этих преобразований получат валидную со своей точки зрения строку...
типа ты пишешь в дельфи "111222111", суть строка без кавычек, но в дельфи ты ее ими обозначаешь. передав куда нибудь там будет строка 111222111, если тебе нужно чтобы та программа получила с кавычками то нужно их внести в строку """111222111""", вот, это в дельфи будет суть "111222111", и передастся тоже она, но если та программа передает дальше аналогичному парсеру (т.е. тоже обозначает строки кавычками) та получит 111222111... опять, а ждет чего то с обозначениями строк.
в общем возьми в руки бумажку, карандаш и посчитай, что на каком этапе получается и сравни с тем что там нужно.
← →
harisma © (2009-12-21 17:46) [9]Вот теперь спасибо за внятный обстоятельный и понятный ответ :)
← →
Leonid Troyanovsky © (2009-12-21 19:21) [10]
> harisma © (21.12.09 17:46) [9]
> Вот теперь спасибо за внятный обстоятельный и понятный ответ
> :)
Осталось непонятным, что ж из всего этого было ранее непонятным.
--
Regards, LVT.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2011.07.31;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.004 c