1

Тема: VBA: Колдунство какое-то...

Извините, не знаю как обозвать тему. Но я ничего не понимаю. Что не так с кодом?

   If FileName <> Lcase(FileName) Then
      wscript.echo  FileName
      f = fso.GetFile(FileName)
      f.name=Lcase(FileName)
   End If

И вот такой результат (47 строка - это f.name=Lcase(FileName)):

C:\TEMP\789\gif>cscript 2.vbs
Сервер сценариев Windows (Microsoft ®) версия 5.8
© Корпорация Майкрософт (Microsoft Corp.), 1996-2001. Все права защищены.

4254231_E542D0584AF280FF9E29C614527AB40D.GIF
C:\TEMP\789\gif\2.vbs(47, 7) Ошибка выполнения Microsoft VBScript: Требуется объект: 'C:\TEMP\789\gif\4254'


Что не так-то? http://inock.pisem.net/smiles/dntknw.gif
Спасибо

2

Re: VBA: Колдунство какое-то...

Извиняюсь за панику. Не проснусь что-ли еще? Вот так:

 If FileName <> Lcase(FileName) Then
      wscript.echo  FileName
      set f = fso.GetFile(FileName)
      f.name=Lcase(FileName)
   End If

Но, собственно, преобразования к нижнему регистру все равно не происходит.

4254231_E542D0584AF280FF9E29C614527AB40D.GIF
C:\TEMP\789\gif\2.vbs(47, 7) Ошибка выполнения Microsoft VBScript: Файл уже существует

3

Re: VBA: Колдунство какое-то...

Почему VBA, а не VBS - откуда в VBA wscript.echo?!!


Может быть для переименования воспользоваться Shell.Application или вызовом cmd.exe

Забыл пароль и потерял e-mail.

4

Re: VBA: Колдунство какое-то...

shiz пишет:

Почему VBA, а не VBS - откуда в VBA wscript.echo?!!

Если честно, я тут с ОРЗ сижу, и страшно туплю. Разумеется VBS.


shiz пишет:

Может быть для переименования воспользоваться Shell.Application

Да. Спс большое. Так заработало

5

Re: VBA: Колдунство какое-то...

inock, я перенёс тему. Измените префикс языка в заголовке темы и дайте самой теме вменяемое название вместо: «Колдунство какое-то...».

Приводите достаточный код. Из приведённого неясно, что такое «FileName» и т.п.

6

Re: VBA: Колдунство какое-то...

shiz пишет:

Может быть для переименования воспользоваться Shell.Application

Колдунство продолжается. Код:

FolderPath = "C:\"

Set objShellApp = CreateObject("Shell.Application")
Set objFolder = objShellApp.NameSpace(FolderPath)
Set objFolderItem = objFolder.ParseName("autoexec.bat")
wscript.echo objFolderItem.Name

Под Win7:

C:\TEMP\VBS>cscript 4.vbs
Сервер сценариев Windows (Microsoft R) версия 5.8
c Корпорация Майкрософт (Microsoft Corp.), 1996-2001. Все права защищены.

autoexec.bat

Под WinXP:

C:\TEMP\VBS>cscript 4.vbs
Сервер сценариев Windows (Microsoft R) версия 5.7
c Корпорация Майкрософт (Microsoft Corp.), 1996-2001. Все права защищены.

Autoexec

Потеряли расширение имени файла

2alexii: Согласен, косяков допустил много, виноват. Как менять тему ветки не разобрался. Адекватного названия для ветки тоже не придумал Не стебусь, честно.

7

Re: VBA: Колдунство какое-то...

inock пишет:

Потеряли расширение имени файла

В настройках Проводника задано "Скрывать расширение для зарегистрированных типов файлов".

Забыл пароль и потерял e-mail.

8

Re: VBA: Колдунство какое-то...

inock
1)

не знаю как обозвать тему

Тему стоит называть в соответствии с задачей которую Вы собираетесь решить. В данном случае, на сколько я понял, у Вас не получается переименовать файл. Значит имя темы логично может быть "VBS: Проблема с переименованием файла" или "VBS: Ошибка при переименовании файла средствами FileSystemObject" и т.п. А Ваше название темы "Колдунство какое-то..." не несёт смысловой нагрузки. Если разобраться в сути, то название темы нужно, чтобы в дальнейшем и Вы и другие участники форума могли благодаря поиску найти интересующую их информацию. Маловероятно, что следующий скриптописец столкнувшийся с такой проблемой будет искать в форуме совпадение по словам "Колдунство", "Шаманство", "Глюконавтика", "Шизофрения", чтобы найти ответ на свой вопрос.

2) Возможно и тему то создавать не было смысла, если бы Вы пользовались шикарной поисковой системой GOOGLE осмысленно. Стоило всего лишь вбить в поиск "FileSystemObject rename LCase" - (кликаем сюда и наслаждаемся) и вторая же ссылка ведёт на пример скрипта, где всё разобрано - ссылка. Не надо думать, что Вы первооткрыватель и весь мир до этого не наступал на Ваши грабли ). На чужих ошибках учиться всегда выгоднее. Не пренебрегайте этим.

3) Ошибка при переименовании через FileSystemObject абсолютно понятна и логична. В файловой системе Windows имя файла "TEST.txt" и "test.txt" и "TeSt.TxT" идентичны. Поэтому при присвоении имени таким кодом:


f.name=Lcase(FileName)

мы получаем ошибку "Файл уже существует".

Обходится это использованием метода Move, который есть у объекта File или функцией MoveFile у объекта FileSystemObject.


Option Explicit

Dim fso, fileName
Set fso = CreateObject("Scripting.FileSystemObject")

fileName = "C:\TEST.txt"

'Переименование в нижний регистр
fso.GetFile(fileName).Move LCase(fileName)
Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !

9 (изменено: Flasher, 2013-09-28 22:11:32)

Re: VBA: Колдунство какое-то...

Можно так:

File = "C:\FILENAME.EXT"
With CreateObject("Scripting.FileSystemObject")
  GetObject("winmgmts:\\.\root\CIMV2:CIM_DataFile.Name='" & File & "'")._
  Rename(.GetParentFolderName(File) & "\" & LCase(.GetFileName(File)))
End  With