Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
 xp_cmdshell что делать если путь содержит кавычки  [new]
BioVR
Member

Откуда: Москва
Сообщений: 31
Всем доброго дня.
Есть проблема с автоматизацией переноса файлов фотографий, если в имени файла есть кавычка (').
Процедура формирует запрос на перенос файла, но по итогу не может его выполнить. Вот пример:
exec xp_cmdshell 'move "G:\Photos\Москва_Rock'n'Roll_Сретенка, 1 (54)_958121_07_13_2014_21_32_03.JPG" G:\PhotoForDelete'



в результате того, что в имени файла (Москва_Rock'n'Roll_Сретенка) есть ' запрос ломается, и выдает "Неправильный синтаксис около конструкции "n"."

Кто знает, как это можно обойти?
13 авг 14, 12:59    [16436039]     Ответить | Цитировать Сообщить модератору
 Re: xp_cmdshell что делать если путь содержит кавычки  [new]
Glory
Member

Откуда:
Сообщений: 104751
BioVR
Кто знает, как это можно обойти?

Так же как всегда.
Любая одинарная кавычка внутри любой текстовой константы должна быть удвоена
13 авг 14, 13:02    [16436066]     Ответить | Цитировать Сообщить модератору
 Re: xp_cmdshell что делать если путь содержит кавычки  [new]
BioVR
Member

Откуда: Москва
Сообщений: 31
Glory
Любая одинарная кавычка внутри любой текстовой константы должна быть удвоена


Я тоже так думал, т.е. по логике получается так:
exec xp_cmdshell 'move "G:\Photos\Москва_Rock''n''Roll_Сретенка, 1 (54)_958121_07_13_2014_21_32_03.JPG" G:\PhotoForDelete'


Ошибки разумеется не возникает, но и файл при таком запросе не переносится.

Какие еще варианты?
13 авг 14, 13:16    [16436156]     Ответить | Цитировать Сообщить модератору
 Re: xp_cmdshell что делать если путь содержит кавычки  [new]
Glory
Member

Откуда:
Сообщений: 104751
BioVR
но и файл при таком запросе не переносится.

Это уже не проблема xp_cmdshell
13 авг 14, 13:19    [16436178]     Ответить | Цитировать Сообщить модератору
 Re: xp_cmdshell что делать если путь содержит кавычки  [new]
BioVR
Member

Откуда: Москва
Сообщений: 31
Обнаружил нюанс, а такая кавычка ' и вот такая ’
это ведь разные символы?
Но почему то execute xp_cmdshell возвращает именно ' вместо ’
13 авг 14, 13:19    [16436181]     Ответить | Цитировать Сообщить модератору
 Re: xp_cmdshell что делать если путь содержит кавычки  [new]
Glory
Member

Откуда:
Сообщений: 104751
BioVR
Но почему то execute xp_cmdshell возвращает именно ' вместо ’

xp_cmdshell возвращает не кавычки, а результат выполнения команды
13 авг 14, 13:20    [16436187]     Ответить | Цитировать Сообщить модератору
 Re: xp_cmdshell что делать если путь содержит кавычки  [new]
BioVR
Member

Откуда: Москва
Сообщений: 31
Glory
xp_cmdshell возвращает не кавычки, а результат выполнения команды


Эээ, типа сумничали?
Файл называется Москва_Rock’n’Roll_Сретенка, 1 (54)_958121_07_13_2014_21_32_03.JPG
запрос возвращает Москва_Rock'n'Roll_Сретенка, 1 (54)_958121_07_13_2014_21_32_03.JPG
т.е. вместо верхней запятой отображает верхнюю кавычку.

В общем вопрос закрыт, т.к. увидел данную проблему, добавил ее обработку в код.
13 авг 14, 13:30    [16436265]     Ответить | Цитировать Сообщить модератору
 Re: xp_cmdshell что делать если путь содержит кавычки  [new]
Glory
Member

Откуда:
Сообщений: 104751
BioVR
Эээ, типа сумничали?

Нет. Опустился до вашего сленга

BioVR
запрос возвращает Москва_Rock'n'Roll_Сретенка, 1 (54)_958121_07_13_2014_21_32_03.JPG
т.е. вместо верхней запятой отображает верхнюю кавычку.

Просто чудеса. Какой высокоинтеллектуальынй запрос наверное - сам решил, что отображать и как
13 авг 14, 13:35    [16436297]     Ответить | Цитировать Сообщить модератору
 Re: xp_cmdshell что делать если путь содержит кавычки  [new]
Офисный Хомячок
Member

Откуда: Офис
Сообщений: 1358
BioVR
Glory
Любая одинарная кавычка внутри любой текстовой константы должна быть удвоена


Я тоже так думал, т.е. по логике получается так:
exec xp_cmdshell N'move "G:\Photos\Москва_Rock''n''Roll_Сретенка, 1 (54)_958121_07_13_2014_21_32_03.JPG" G:\PhotoForDelete'


Ошибки разумеется не возникает, но и файл при таком запросе не переносится.

Какие еще варианты?


А так тоже не взлетело?
13 авг 14, 13:56    [16436503]     Ответить | Цитировать Сообщить модератору
 Re: xp_cmdshell что делать если путь содержит кавычки  [new]
BioVR
Member

Откуда: Москва
Сообщений: 31
Glory
Нет. Опустился до вашего сленга

BioVR
запрос возвращает Москва_Rock'n'Roll_Сретенка, 1 (54)_958121_07_13_2014_21_32_03.JPG
т.е. вместо верхней запятой отображает верхнюю кавычку.

Просто чудеса. Какой высокоинтеллектуальынй запрос наверное - сам решил, что отображать и как


Уважаемый, если Вы не вникаете в сообщения, то лучше просто не лезть с "помощью".
Создайте файл, в названии которого будет верхняя запятая и получите название данного файла через xp_cmdshell - получите вместо верхней запятой одинарную кавычку. И восхититесь в полной мере чудом данного "высокоинтеллектуальынй"-го запроса.

Офисный Хомячок, читайте выше, проблема не в кавычке, а в запятой.
13 авг 14, 14:34    [16436772]     Ответить | Цитировать Сообщить модератору
 Re: xp_cmdshell что делать если путь содержит кавычки  [new]
Офисный Хомячок
Member

Откуда: Офис
Сообщений: 1358
BioVR
Офисный Хомячок, читайте выше, проблема не в кавычке, а в запятой.


Хм.
13 авг 14, 14:35    [16436783]     Ответить | Цитировать Сообщить модератору
 Re: xp_cmdshell что делать если путь содержит кавычки  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
BioVR
и получите название данного файла через xp_cmdshell
xp_cmdshell не умеет получать названия файлов. xp_cmdshell выполняет команды операционной системы, причем те команды, которые вы написали.
13 авг 14, 14:40    [16436816]     Ответить | Цитировать Сообщить модератору
 Re: xp_cmdshell что делать если путь содержит кавычки  [new]
Glory
Member

Откуда:
Сообщений: 104751
BioVR
Уважаемый, если Вы не вникаете в сообщения, то лучше просто не лезть с "помощью".

Уважаемый, если вы пришли на проффесиональный форум, то НЕ используйте свою терминологию.

BioVR
Создайте файл, в названии которого будет верхняя запятая и получите название данного файла через xp_cmdshell - получите вместо верхней запятой одинарную кавычку. И восхититесь в полной мере чудом данного "высокоинтеллектуальынй"-го запроса.

Что такое "верхняя запятая" ? Очередной придуманный вами термин ?

Специально для особовникающих
exec xp_cmdshell N'@echo Test1>> C:\wo\File''1''.txt'
exec xp_cmdshell N'@echo Test2>> C:\wo\File`2`.txt'
exec xp_cmdshell N'dir c:\wo\file*'

 Volume in drive C has no label.
Volume Serial Number is 5473-BFAE
NULL
Directory of c:\wo
NULL
13.08.2014 13:42 42 File'1'.txt
13.08.2014 13:42 35 File`2`.txt
2 File(s) 77 bytes
0 Dir(s) 341 831 983 104 bytes free
NULL
13 авг 14, 14:43    [16436834]     Ответить | Цитировать Сообщить модератору
 Re: xp_cmdshell что делать если путь содержит кавычки  [new]
o-o
Guest
слушайте, да проблемы вообще нет, у меня оно отлично переместило файл с этими символами
(не буду их никак обзывать) имеющими ascii-код 146
вы поди в студии не можете этот символ правильно набрать, ну так прилепите его кодом: char(146)
13 авг 14, 14:50    [16436884]     Ответить | Цитировать Сообщить модератору
 Re: xp_cmdshell что делать если путь содержит кавычки  [new]
BioVR
Member

Откуда: Москва
Сообщений: 31
Glory,

Верняя запятая
13 авг 14, 15:00    [16436941]     Ответить | Цитировать Сообщить модератору
 Re: xp_cmdshell что делать если путь содержит кавычки  [new]
Glory
Member

Откуда:
Сообщений: 104751
BioVR
Glory,

Верняя запятая

А вы сами то пробовали вручную создать файл с именем содержащим этот символ ?
13 авг 14, 15:05    [16436969]     Ответить | Цитировать Сообщить модератору
 Re: xp_cmdshell что делать если путь содержит кавычки  [new]
Офисный Хомячок
Member

Откуда: Офис
Сообщений: 1358
BioVR
Glory,

Верняя запятая


https://www.sql.ru/faq/faq_topic.aspx?fid=127
13 авг 14, 15:05    [16436974]     Ответить | Цитировать Сообщить модератору
 Re: xp_cmdshell что делать если путь содержит кавычки  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
BioVR
Glory,

Верняя запятая
В русском языке это называется "апостроф". Понятия "Верхняя запятая" в русском языке нет.
13 авг 14, 15:08    [16436993]     Ответить | Цитировать Сообщить модератору
 Re: xp_cmdshell что делать если путь содержит кавычки  [new]
Glory
Member

Откуда:
Сообщений: 104751
BioVR
Glory,

Верняя запятая

https://ru.wikipedia.org/wiki/Апостроф
13 авг 14, 15:09    [16436999]     Ответить | Цитировать Сообщить модератору
 Re: xp_cmdshell что делать если путь содержит кавычки  [new]
BioVR
Member

Откуда: Москва
Сообщений: 31
o-o,

Я же написал выше, что проблема уже решена.
Если описать ситуацию в целом, то
1. Получаем из папки список файлов
2. Проверяем, какие из файлов лишние
3. Перемещаем лишние файлы в другую папку

Названия файлов задаются пользователями и никак не ограничены. Проблема именно с верхней запятой (или иначе апостроф), который является символом и выглядит как запятая (а не кавычка, наклонная кавычка (да уж простят меня за столь не профессиональные выражения профессионалы)), ее запрос возвращает в другом виде, и по факту получается другой символ - в результате когда пытаемся переместить данный файл, то его не находит, т.к. символы отличаются.

Во вложении пример названия такой фотографии.

Вот код, который должен сделать ее перемещение:
declare @step int, @count int, @sql varchar(max), @Dir varchar(200)='C:\Test2'
create table #DontNeedPhotoOutput (output varchar(max))
insert into #DontNeedPhotoOutput execute xp_cmdshell 'dir C:\Test /B'
select row_number() over (ORDER BY [output]) as id, output as [FileName] into #DontNeedPhoto from #DontNeedPhotoOutput
select @count=count(*) from #DontNeedPhoto
set @step=0
WHILE (@step < @count)
	begin
		set @sql=''
		select top 20 @sql=@sql+'exec xp_cmdshell ''move "C:\Test\'+[FileName]+'" ' +@Dir+''', NO_OUTPUT'+Char(13) from #DontNeedPhoto where id>@step
		exec (@sql)
		set @step = @step+20
	end
drop table #DontNeedPhoto
drop table #DontNeedPhotoOutput
GO


К сообщению приложен файл. Размер - 120Kb
13 авг 14, 15:10    [16437001]     Ответить | Цитировать Сообщить модератору
 Re: xp_cmdshell что делать если путь содержит кавычки  [new]
Glory
Member

Откуда:
Сообщений: 104751
BioVR
ее запрос возвращает в другом виде,

Купите очки или протрите глаза.
13 авг 14, 15:12    [16437008]     Ответить | Цитировать Сообщить модератору
 Re: xp_cmdshell что делать если путь содержит кавычки  [new]
o-o
Guest
BioVR
Glory,

Верняя запятая


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

кстати.
меня тут осенило, глядя на ваш код. вы ж не юникодом передаете.
я-то копирую ваш символ, смотрю его ascii, но это в моей кодовой странице,
а совсем не в вашей, код-то больше 128.
может и у вас получается бардак с кодовыми страницами.

попробуйте получаемое содержимое папки сложить в юникодное поле,
и команду по перемещению потом формировать юникодную
13 авг 14, 15:16    [16437031]     Ответить | Цитировать Сообщить модератору
 Re: xp_cmdshell что делать если путь содержит кавычки  [new]
BioVR
Member

Откуда: Москва
Сообщений: 31
Glory, в общем понятно - троль есть троль. Чего с Вами спорить и пытаться что то объяснить.
13 авг 14, 15:23    [16437077]     Ответить | Цитировать Сообщить модератору
 Re: xp_cmdshell что делать если путь содержит кавычки  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
BioVR
Glory, в общем понятно - троль есть троль. Чего с Вами спорить и пытаться что то объяснить.
Вам уже все объяснили и показали. В т.ч. и Glory. Специально для слепых:

16436834
16436974
16437031
13 авг 14, 15:25    [16437088]     Ответить | Цитировать Сообщить модератору
 Re: xp_cmdshell что делать если путь содержит кавычки  [new]
Glory
Member

Откуда:
Сообщений: 104751
BioVR
Glory, в общем понятно - троль есть троль. Чего с Вами спорить и пытаться что то объяснить.

Конечно. Главное, что вы написали прекрасный код, а "плохие" команды неправильно отображают результаты.
13 авг 14, 15:25    [16437094]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить