Форум программистов, компьютерный форум, киберфорум
VBScript/JScript/WSH/WMI/HTA
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.94/32: Рейтинг темы: голосов - 32, средняя оценка - 4.94
0 / 0 / 0
Регистрация: 13.05.2012
Сообщений: 9
1

Ошибка 800A0034 "Недопустимое имя или номер файла" при работе с методами объекта FileSystemObject

25.05.2012, 00:30. Показов 5862. Ответов 5
Метки нет (Все метки)

Озадачился недавно автоматизировать создание архива из выбранных файлов и папок с помощью кнопки на панели Total Commander. При нажатии кнопки вызывается .VBS файл с параметрами:
%P%S (список всех выделенных файлов\папок с полными путями);
%N (имя файла с расширением под курсором. Используется для задания имени создаваемого архива).
и интерпретируется WSH. При успешном создании архива исходные файлы/папки автоматически удаляются.
После нескольких дней чтения документации и экспериментов (впервые создаю программу на объектно-ориентированном языке) родился следующий скрипт:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Dim objargs, i, farh, path
Set objargs = WScript.Arguments
farh = " "
    For i=0 To objargs.Count-2 
    farh = farh & Chr(34) & objargs(i) & Chr(34) & " "
    Next
Set WshShell = CreateObject("WScript.Shell")
Set job = WshShell.Exec ("e:\progs\TotalCmd\plugins\arc\7za.exe a -tzip " &Chr(34)&objargs(objargs.Count-1) & ".zip"&Chr(34)& " "&farh)
    Do  
    WScript.Sleep 30 
    Loop While job.Status = 1
    Set FSO = CreateObject("Scripting.FileSystemObject") 
    For i=0  To objargs.Count-2 
            path = Chr(34)&objargs(i)&Chr(34)
        If FSO.FileExists(path) Then 
            'MsgBox ("файл: "&path) 
            FSO.DeleteFile path, True
        Else
            'MsgBox ("папка: "&path)
            FSO.DeleteFolder path, True
        End If
    Next
При запуске скрипта появляется
Ошибка: Недопустимое имя или номер файла
Код: 800A0034

Источник ошибки строчка:
path = Chr(34)&objargs(i)&Chr(34)
если отказаться от кавычек в пути:
path = objargs(i)
скрипт работает, однако не всегда правильно отрабатывает файлы и папки с пробелами в имени. Никак не могу понять почему строковая переменная с кавычками неправильно обрабатывается FSO.FileExists, FSO.DeleteFile и FSO.DeleteFolder ?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.05.2012, 00:30
Ответы с готовыми решениями:

Ошибка "недопустимое имя объекта" при использовании LINQ to SQL
Здравствуйте, уважаемые форумчане! Я начинающий разработчик ASP.NET MVC. Сейчас создаю тестовый...

Ошибка при передаче файла по FTP "Недопустимое имя файла"
Пытаюсь создать и отправить txt файл через ftp. Вот на форуме нашёл код: private void...

Ошибка "недопустимое Имя Объекта"
использую visual studio 2010. Создал 3 таблицы в базе data,datab,datao. создал подключение к ней....

Программа выдает "Недопустимое имя объекта "Games"" не могу понять почему
Программа выдает ошибку "SqlException: Недопустимое имя объекта "Games"", хотя база имеется как и...

__________________

Записывайтесь на профессиональные курсы DevOps-инженеров
5
2616 / 546 / 109
Регистрация: 21.03.2012
Сообщений: 1,051
25.05.2012, 10:22 2
Оператор path = Chr(34)&objargs(i)&Chr(34) добавляет символы кавычек к значению имени файла (папки), чего никак не должно быть, потому что:
- эти символы недопустимо использовать в именах файлов (папок);
- строка STRING не эквивалентна строке "STRING".

В кавычки надо брать (при необходимости) аргументы, задаваемые при запуске сценария.
1
0 / 0 / 0
Регистрация: 13.05.2012
Сообщений: 9
27.05.2012, 12:07  [ТС] 3
а как быть, если программа, передающая аргументы не может формировать их в виде, который понимает WSH?
вот еще один пример: при удалении папок в помощью FSO.DeleteFolder path, True Total Commander передает путь папки как "d:\tmp\test\Intradution". При попытке удаления папки иногда возникает ошибка "Разрешение отклонено, Код: 800A0046", которая решается добавлением "\" в путь "d:\tmp\test\Intradution\".
Однако после такой строчки в коде:
Visual Basic
1
2
fpath = path & Chr(92)
FSO.DeleteFolder fpath , True
возникает ошибка "путь не найден Код: 800A004C"!
Что за напасть!
Ведь WScript.Arguments возвращает значение строковой переменной, которое было задано при запуске скрипта. Почему невозможно обрабатывать эту строчку в скрипте таким образом, чтобы исключить ошибки при использовании FileSystemObject?
0
2616 / 546 / 109
Регистрация: 21.03.2012
Сообщений: 1,051
28.05.2012, 14:02 4
Цитата Сообщение от Kostenelo Посмотреть сообщение
как быть, если программа, передающая аргументы не может формировать их в виде, который понимает WSH?..
А в каком виде она может их формировать?
Цитата Сообщение от Kostenelo Посмотреть сообщение
... При попытке удаления папки иногда возникает ошибка "Разрешение отклонено, Код: 800A0046", которая решается добавлением "\" в путь "d:\tmp\test\Intradution\"...
Причина возникновения указанной ошибки не может быть связана с отсутствием финального символа "\". Более того, наличие этого символа как раз должно вызывать ошибку "Путь не найден Код: 800A004C".
Наличие же ошибки с кодом 800A0046 свидетельствует о нехватке у процесса полномочий для выполнения заданной операции.
Цитата Сообщение от Kostenelo Посмотреть сообщение
... Почему невозможно обрабатывать эту строчку в скрипте таким образом, чтобы исключить ошибки при использовании FileSystemObject?
Возможно (и не только при использовании средств FSO). Поищите в справке по VBS информацию об использовании выражения On Error
0
0 / 0 / 0
Регистрация: 13.05.2012
Сообщений: 9
28.05.2012, 20:21  [ТС] 5
Решение оказалось простое: Total Commander передавал аргументы в кавычках, однако чтобы выяснить это использовал MsgBox ("путь"), который "съедал" кавычки и показывал только значения, что и ввело меня в заблуждение. Когда я пытался модифицировать "путь" я добавлял в него ненужные дополнительные кавычки (""путь"") или слеш за кавычками ("путь"\), что и проводило к ошибке 800A0034, поскольку такого файла действительно не существовало.
0
30 / 30 / 4
Регистрация: 24.02.2012
Сообщений: 18
09.10.2012, 21:36 6
Цитата Сообщение от Kostenelo Посмотреть сообщение
Решение оказалось простое: Total Commander передавал аргументы в кавычках, однако чтобы выяснить это использовал MsgBox ("путь"), который "съедал" кавычки и показывал только значения, что и ввело меня в заблуждение. Когда я пытался модифицировать "путь" я добавлял в него ненужные дополнительные кавычки (""путь"") или слеш за кавычками ("путь"\), что и проводило к ошибке 800A0034, поскольку такого файла действительно не существовало.
Диалог выбора файла, приведенный в скрипте ниже, как оказалось, возвращает имя с символами новой строки и возврата каретки. Аналогично описанному выше на fso.opentextfile вылазила ошибка 800A0034. Отсек 2 символа справа
Visual Basic
1
2
3
4
5
set wshell = createobject("wscript.shell")
set oexec=wshell.exec("mshta.exe ""about:<input type=file id=FILE><script>FILE.click();new ActiveXObject('Scripting.FileSystemObject').GetStandardStream(1).WriteLine(FILE.value);close();resizeTo(100,100);</script>""")
fsel = oexec.stdout.readall
srcname = left(fsel, len(fsel) - 2)
set src = fso.opentextfile(srcname)
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.10.2012, 21:36

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Подключение к Access 2007 и ошибка "Недопустимое имя файла"
Здравствуйте .. Впервые подключаюсь из C# в ACCESS 2007 и возникает ошибка: Недопустимое имя...

Ошибка "Недопустимое имя (название таблицы)" при попытке удалить запись
Всем привет! Подскажите пожалуйста, есть приложение Delphi для работы с БД и БД созданная в СУБД...

При сохранении проекта в RAD Studio 2010 XE пишет ошибку "недопустимое имя файла"
Тему с моим вопросом не нашел пишу сюда)Новые проекты перестали сохраняться при сохранении пишет...

SqlException: "Недопустимое имя объекта"
Здраствуйте!Почему возникает эта ошибка?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.