Страница: 1 |
Страница: 1 |
Вопрос: VB6, утилиты командной строки и путь с пробелами
Добавлено: 06.08.07 20:37
Автор вопроса: Viktor Petrov
Здравствуйте, господа!
Имею программу, которая передает в утилиту командной строки путь к файлу, та его обрабатывает и выдает некоторые данные в ответ. Но есть проблема - обработка корректно осуществляется только в случае, если путь к файлу состоит исключительно из латинских букв, и без пробелов. Если же название файла русское, и\или с пробелами - будет ошибка - file not found.
Например, такой код работать будет:
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
О господи...
Номер ответа: 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
...
.......
Способности к анализу информации отсутствуют. Необходима выдача ответа не только в готовом, но и в пережёванном виде.
Viktor Petrov, чтобы в строке появилась кавычка, её надо удвоить. """" - это одна кавычка (догадайся почему). Если бы ты запустил msgbox, ты бы увидел одну кавычку. Но ты не запустил.
cmdpth = """1.CR2"""
- Песец!
- Ответ не полный!
- Полный песец!..
Номер ответа: 9
Автор ответа:
ZagZag
ICQ: 295002202
Вопросов: 87
Ответов: 1684
Профиль | | #9
Добавлено: 06.08.07 21:50
Заместо Shell прикручивай свою функцию dosShell
Номер ответа: 10
Автор ответа:
Viktor Petrov
Вопросов: 12
Ответов: 27
Профиль | | #10
Добавлено: 06.08.07 22:17
Запустил (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-версию его имени - так что файлы придется именно переименовывать, да?
Номер ответа: 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 нельзя сделать а админ