Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.07.31;
Скачать: CL | DM;

Вниз

Название целевой директории в формате 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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.008 c
15-1302303058
Германн
2011-04-09 02:50
2011.07.31
Build vs Compile


15-1302710075
R_R
2011-04-13 19:54
2011.07.31
Screen Dos приложения


15-1302588303
OW
2011-04-12 10:05
2011.07.31
Задача определения региона по номеру позвонившего


15-1300890864
Kerk
2011-03-23 17:34
2011.07.31
Посоветуйте eInk -читалку


2-1303629199
iamempty
2011-04-24 11:13
2011.07.31
Выборка данных из определенного поля таблицы с помощью DBGrid