Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: VB6, утилиты командной строки и путь с пробелами Добавлено: 06.08.07 20:37  

Автор вопроса:  Viktor Petrov
Здравствуйте, господа!
Имею программу, которая передает в утилиту командной строки путь к файлу, та его обрабатывает и выдает некоторые данные в ответ. Но есть проблема - обработка корректно осуществляется только в случае, если путь к файлу состоит исключительно из латинских букв, и без пробелов. Если же название файла русское, и\или с пробелами - будет ошибка - file not found.

Например, такой код работать будет:
Private Sub Command1_Click()

Dim s$
cmdpth = "1.CR2"
s = dosShell("exiftool -exif:fnumber " & cmdpth) 'посылаем команду утилите командной строки (exiftool.exe)

MsgBox (s) 'выводим на экран ответ утлиты командной строки

End Sub

Private Sub Form_Load()
    Call initDos 'загружаем функцию из модуля dosShell для работы с командной строкой
End Sub


А вот если название файла, к примеру "фото 2" (cmdpth = "фото 2.CR2") - вылезет ошибка. Возникает вопрос - что с этим делать? По правилам, в командной строке путь к файлу с пробелами надо заключать в двойные кавычки - но как это сделать? Ведь VB6 - это не PHP, закавычить двойные кавычки одинарными не получается. А с кириллицей вообще непонятки...

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

Ответить

  Ответы Всего ответов: 14  

Номер ответа: 1
Автор ответа:
 GSerg



Вопросов: 0
Ответов: 1876


 Профиль | | #1 Добавлено: 06.08.07 20:47
По правилам, в командной строке путь к файлу с пробелами надо заключать в двойные кавычки - но как это сделать? Ведь VB6 - это не PHP, закавычить двойные кавычки одинарными не получается.

О господи...

msgbox """"

Ответить

Номер ответа: 2
Автор ответа:
 Viktor Petrov



Вопросов: 12
Ответов: 27
 Профиль | | #2 Добавлено: 06.08.07 20:56
Наверное туплю, но я таки не понял, как с помощью msgbox'а передать команду утилите командной строки...

Ответить

Номер ответа: 3
Автор ответа:
 GSerg



Вопросов: 0
Ответов: 1876


 Профиль | | #3 Добавлено: 06.08.07 21:15
О господи!..

""""

Ответить

Номер ответа: 4
Автор ответа:
 VisualPaul



ICQ: 402519798 

Вопросов: 12
Ответов: 111
 Профиль | | #4 Добавлено: 06.08.07 21:17
А можно через Chr$

Ответить

Номер ответа: 5
Автор ответа:
 VisualPaul



ICQ: 402519798 

Вопросов: 12
Ответов: 111
 Профиль | | #5 Добавлено: 06.08.07 21:21
MsgBox-пример на самом деле конечно будет что-то другое(ShellExecute,WinExecute,Shell

Ответить

Номер ответа: 6
Автор ответа:
 Viktor Petrov



Вопросов: 12
Ответов: 27
 Профиль | | #6 Добавлено: 06.08.07 21:26
Т.Е. cmdpth = ""1.CR2"" что-ли? Ессно, выдаст ошибку (Expected: end of statement).

Ответить

Номер ответа: 7
Автор ответа:
 Viktor Petrov



Вопросов: 12
Ответов: 27
 Профиль | | #7 Добавлено: 06.08.07 21:28
VisualPaul, а можно поподробнее, как именно Chr$ для решения моей проблемы использовать? Или ссылочку какую...

Ответить

Номер ответа: 8
Автор ответа:
 GSerg



Вопросов: 0
Ответов: 1876


 Профиль | | #8 Добавлено: 06.08.07 21:46
Т.Е. cmdpth = ""1.CR2"" что-ли?

...
.......
Способности к анализу информации отсутствуют. Необходима выдача ответа не только в готовом, но и в пережёванном виде.

Viktor Petrov, чтобы в строке появилась кавычка, её надо удвоить. """" - это одна кавычка (догадайся почему). Если бы ты запустил msgbox, ты бы увидел одну кавычку. Но ты не запустил.

cmdpth = """1.CR2"""


- Дети, назовите степных зверей. Вот ты, Вовочка.
- Песец!
- Ответ не полный!
- Полный песец!..

Ответить

Номер ответа: 9
Автор ответа:
 ZagZag



ICQ: 295002202 

Вопросов: 87
Ответов: 1684
 Профиль | | #9 Добавлено: 06.08.07 21:50
Shell "notepad ""C:\WINDOWS\INF\sysoc.inf"""

Заместо Shell прикручивай свою функцию dosShell

Ответить

Номер ответа: 10
Автор ответа:
 Viktor Petrov



Вопросов: 12
Ответов: 27
 Профиль | | #10 Добавлено: 06.08.07 22:17
Viktor Petrov, чтобы в строке появилась кавычка, её надо удвоить. """" - это одна кавычка (догадайся почему). Если бы ты запустил msgbox, ты бы увидел одну кавычку. Но ты не запустил.


Запустил (MsgBox "aaa "bbb" ccc", vbYesNo + vbExclamation, "ddd";) - увидел ошибку. Сорри конечно, стормозил, но с кем не бывает...

Спасибо за ответ.


2 ZagZag
Огромное спасибо.


2 ALL

А по-поводу кириллицы мыслей случайно нет?

Ответить

Номер ответа: 11
Автор ответа:
 shuffle



Администратор

ICQ: 201502381 

Вопросов: 15
Ответов: 737
 Профиль | | #11 Добавлено: 06.08.07 22:59
Переведи путь в формат 8.3

Ответить

Номер ответа: 12
Автор ответа:
 Viktor Petrov



Вопросов: 12
Ответов: 27
 Профиль | | #12 Добавлено: 07.08.07 04:10
Переведи путь в формат 8.3


Т.Е. переименовать файлы - имя - 8 символов, расширение - 3, все это заглавными буквами и без пробелов? Не помогает. К тому же, если я правильно понимаю, современные версии Винды ведь уже не создают автоматом для файла с длинным именем 8.3-версию его имени - так что файлы придется именно переименовывать, да?

Ответить

Номер ответа: 13
Автор ответа:
 shuffle



Администратор

ICQ: 201502381 

Вопросов: 15
Ответов: 737
 Профиль | | #13 Добавлено: 07.08.07 07:02
GetShortPathName

Ответить

Номер ответа: 14
Автор ответа:
 VisualPaul



ICQ: 402519798 

Вопросов: 12
Ответов: 111
 Профиль | | #14 Добавлено: 13.08.07 11:10
Гений!!! Без шуток! +1 нельзя сделать а админ

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам