1 Вопрос: Как использовать VBScript для переименования файлов в каталоге, добавляя имя папки ко всем файлам в папке?

вопрос создан в Wed, May 8, 2019 12:00 AM

У меня есть большое количество файлов изображений, охватывающих почти два десятилетия, где субъект идентифицируется по имени каталога, и большинство фотографий имеют общее имя, однако некоторые из них имеют более конкретные имена. Я пишу сценарий для добавления имени каталога к имени файла для всех файлов в определенном каталоге. Ну, я пытаюсь по крайней мере. Прошло несколько лет с тех пор, как я использовал VBScript, и кажется, что я ОЧЕНЬ ржавый. У меня проблемы с форматом синтаксиса.

Когда у меня есть Option Explicit (в строке 6), он выдает ошибку строки 6, символ 1, ошибка: ожидаемое выражение, код: 800A0400 (в моем общем коде это будет строка 7 из-за добавленной строки начала файла) ) р>

Если я закомментирую это, я получу ошибку в операторах импорта вместо строки 3, символ 1, ошибка: несоответствие типов: «импорт», код: 800A000D (в моем общем коде это будет строка 4 из-за добавленное начало строки файла)

Я потратил несколько часов на поиск возможных причин, но безрезультатно, поэтому обращаюсь к сообществу за помощью в правильной настройке форматирования этого сценария.

Любые комментарии о лучшем подходе сценария для выполнения этой задачи также приветствуются.

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

В коде в настоящее время настроено создание только окна сообщения для каждого файла в качестве тестовой меры, чтобы гарантировать, что переменные имеют значения, которые, я думаю, они имеют. Закомментированный код для переименования файла является действительно предназначенной целью. Однако я застрял на правильном форматировании первой части файла. В общем, я выполняю это из командной строки, используя: cscript.exe c: \MyTools \addDir2FileName.vbs

Я запустил его через проводник Windows, чтобы получить более конкретные коды ошибок с номерами строк.

Я добавил комментарии «Начало файла» и «Конец файла» только для ясности в этом посте.

' ####### Beginning of File
' Renames all files in a directory prepending the directory name to the file name

Imports System
Imports System.IO

Option Explicit

Dim WshShell, strOldFull, strNewFull, strFullPath, strCurDir
Dim strCurrentName, strNewName, strMessage, dir, fileObj, fs, fo

' Get the current directory
Set WshShell = CreateObject("WScript.Shell")
strFullPath = WshShell.CurrentDirectory

'Get folder properties to get just the name without path
Set fs=Server.CreateObject("Scripting.FileSystemObject")
Set fo=fs.GetFolder(strFullPath)

strCurDir = fo.Name

'Iterate through the directory
set dir = DirectoryInfo(strFullPath)

For Each fileObj In dir.GetFiles()
  strCurrentName = fileObj.Name
  strNewName = strCurDir & " - " & strCurrentName

  ' For testing purposes to make sure everything is as expected
  ' Creates a message box for each file instead of actually renaming it
  strMessage = "Old Name: " & strCurrentName & chr(13) & chr(10) & "New Name: " & strNewName 
  MsgBox strMessage

  ' Renaming the file
  ' strOldFull =  fs.BuildPath(CurrentDirectory, strCurrentName)
  ' strNewFull = fs.BuildPath(CurrentDirectory, strNewName)
  ' My.Computer.FileSystem.RenameFile(strOldFull, strNewFull)

Next

WshShell = Nothing
fo = Nothing
fs = Nothing

' ### End of File

Ожидается, что файл "C: \Pictures \Trip to Nice \DCM001.jpg" будет переименован в "C: \Pictures \Trip to Nice \Trip to Nice - DCM001.jpg" и что все файлы в каталог, в котором выполняется скрипт, будет аналогично переименован. Ну, если быть более точным, вывод в текущем отформатированном виде выдаст окно с сообщением «Старое имя: C: \Pictures \Trip to Nice \DCM001.jpg Новое имя: C: \Pictures \Trip to Nice \Trip to Nice - DCM001.jpg "и что для всех файлов в каталоге будет создано окно сообщения. Да, я буду запускать версию окна сообщений только в тестовой директории с 3 файлами. Я бы не хотел получать 50000 окон сообщений, смеется.

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

Спасибо за ваше время и любую помощь, которую может предоставить каждый. Я впервые отправляю сообщения в сообщество, но давно оценил предоставленные ответы. Обычно я могу найти ответы на свои вопросы, но на этом я в тупике ...

    
0
  1. Операторы Imports не являются допустимым синтаксисом VBScript.
    2019-05-09 03: 36: 33Z
  2. 2019-05-09 03: 40: 44Z
1 ответ                              1                         

Хорошо, после множества проб и ошибок я нашел способ выполнить задачу, в котором я не использовал System, и таким образом избежал ошибки, которую я получал раньше. Я подумал опубликовать окончательный сценарий на тот случай, если кому-то будет интересно.

' Renames all files in a directory prepending the directory name to the file name
Option Explicit

Dim WshShell, strOldFull, strFullPath, strCurDir, lastSlash
Dim strCurrentName, strNewName, strMessage, fileObj, fileSpec, fs, fo, ff

' Get the current directory
Set WshShell = CreateObject("WScript.Shell")
strFullPath = WshShell.CurrentDirectory

'Get folder object 
Set fs = CreateObject("Scripting.FileSystemObject")
Set fo = fs.GetFolder(strFullPath)
set ff = fo.Files

'Get just the folder name
lastSlash = inStrRev(strFullPath, "\")
strCurDir = right(strFullPath, len(strFullPath) - lastSlash )


'Iterate through the directory
For Each fileObj in ff
  strCurrentName = fileObj.Name
  strNewName = strCurDir & " - " & strCurrentName

  ' For testing purposes to make sure everything is as expected
  ' Creates a message box for each file instead of actually renaming it
  ' strMessage = "Old Name: " & strCurrentName & chr(13) & chr(10) & "New Name: " & strNewName 
  ' MsgBox strMessage

  ' Renaming the file
  strOldFull =  strFullPath & "\" & strCurrentName
  set fileSpec = fs.GetFile(strOldFull)
  fileSpec.Name = strNewName

Next
    
0
2019-05-08 19: 17: 59Z
источник размещен Вот