Войти

Показать полную графическую версию : [решено] Поиск файла и переименование


Traveller124
21-06-2012, 00:42
Имеется папка Folder с подпапками. Необходимо произвести поиск файлов (в каждой папке он будет один), в наименовании которых встречается "file" (например: Dfile1_56.txt, 73_file.txt, file.txt) и произвести переименование файлов на 123_temp_file.txt.

Прошу помочь.
Заранее спасибо.

Iska
21-06-2012, 02:27
Примерно так:
Option Explicit

Dim strSourceFolder

Dim objFSO
Dim objFolder
Dim objFile

Dim objRegExp


If WScript.Arguments.Count = 1 Then
strSourceFolder = WScript.Arguments.Item(0)

Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")

If objFSO.FolderExists(strSourceFolder) Then
With WScript.CreateObject("VBScript.RegExp")
.Pattern = ".*file.*\.txt"
.IgnoreCase = True

For Each objFolder In objFSO.GetFolder(strSourceFolder).SubFolders
For Each objFile In objFolder.Files
If .Test(objFile.Name) Then
If objFile.Name <> "123_temp_file.txt" Then
WScript.Echo "Found file [" & objFile.Path & "]"

objFile.Name = "123_temp_file.txt"

WScript.Echo " Rename into [" & objFile.Path & "]"
End If
End If
Next
Next
End With
Else
WScript.Echo "Source folder [" & strSourceFolder & "] not found"
End If

Set objFSO = Nothing
Else
WScript.Echo "Usage: cscript.exe //nologo """ & WScript.ScriptName & """ ""<Source folder>"""
End If

WScript.Quit 0

Iska
22-06-2012, 02:11
Из письма в PM:
К сожалению, взял Ваш Код, вставив в Notepad++, сохранил с расширением *.vbs (new2.vbs), положил сохранный файл в папку Folder, в которой уже находился файл Dfile1_56.txt и папка F001, в которой был файл file.txt. Запустил new2.vbs, но файлы как были со старыми именами, так и остались :( .

Что не так?

+ не могу понять, где в коде указать путь до папки Folder :(
1. Желательно указывать ссылкой, какой именно код имеется в виду. Хорошо, что у Вас пяток сообщений, и можно быстро найти наши с Вами общие связи.

2. Сообщение:
---------------------------
Windows Script Host
---------------------------
Usage: cscript.exe //nologo "new2.vbs" "<Source folder>"
---------------------------
ОК
---------------------------

выводящееся при таком запуске, Вас ничем не заинтересовало? Путь к папке указывается аргументом при вызове скрипта.

3. Определитесь, пожалуйста. Изначально Вы писали про:
Имеется папка Folder с подпапками. Необходимо произвести поиск файлов (в каждой папке он будет один), »
— ни о поиске файлов в самой папке, ни о рекурсивном поиске файлов ниже папок первого уровня вложенности речь Вами не велась.

Traveller124
22-06-2012, 02:52
Iska, спсб за оперативный ответ.
1. Желательно указывать ссылкой, какой именно код имеется в виду. »
Ваше замечание обязательно учту и в дальнейшем буду указывать.

2. Сообщение:
...
выводящееся при таком запуске, »
К сожалению, по данному коду у меня ничего не происходит в том числе нет ни какого сообщения. :(

Путь к папке указывается аргументом при вызове скрипта. »
Вот так например objFolder = "D:\001\Folder" - понимаю, а вот что означает "указывается аргументом" - не понимаю. :(
В написании кодов очень слаб - это больше увлечение по необходимости, а не образ жизни (профессия/работа с ИТ технологиями не связана) .

3. Определитесь, пожалуйста. Изначально Вы писали про: »
Наверное я чуток не так написал, не исключаю, но когда я указал, что "Имеется папка Folder с подпапками." и далее упоминал про "(в каждой папке он будет один)" я как раз и имел в виду папку Folder с подпапками.

Iska
22-06-2012, 03:10
Вот так например objFolder = "D:\001\Folder" - понимаю, а вот что означает "указывается аргументом" - не понимаю. »
Например, Вы сохранили скрипт в «c:\Temp\new2.vbs». Запускаете командную строку. В ней пишете:
cscript.exe //nologo "c:\Temp\new2.vbs" "D:\001\Folder"
«D:\001\Folder» — это и будет аргумент скрипта.

Наверное я чуток не так написал, не исключаю, но когда я указал, что "Имеется папка Folder с подпапками." и далее упоминал про "(в каждой папке он будет один)" я как раз и имел в виду папку Folder с подпапками. »
В этом случае обычно пишут — рекурсивно, что означает — по всем уровням вложенности. Данный скрипт на это не был рассчитан. Надо будет его менять.

Traveller124, пробуйте так:
Option Explicit

Dim strSourceFolder

Dim objFSO
Dim objRegExp


If WScript.Arguments.Count = 1 Then
strSourceFolder = WScript.Arguments.Item(0)

Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")

If objFSO.FolderExists(strSourceFolder) Then
Set objRegExp = WScript.CreateObject("VBScript.RegExp")

With objRegExp
.Pattern = ".*file.*\.txt"
.IgnoreCase = True
End With

ScanSubFolders objFSO.GetFolder(strSourceFolder)

Set objRegExp = Nothing
Else
WScript.Echo "Source folder [" & strSourceFolder & "] not found"
End If

Set objFSO = Nothing
Else
WScript.Echo "Usage: cscript.exe //nologo """ & WScript.ScriptName & """ ""<Source folder>"""
End If

WScript.Quit 0
'=============================================================================

'=============================================================================
Sub ScanSubFolders(objFolder)
Dim objFile
Dim objSubFolder

'WScript.Echo objFolder.Path

For Each objFile In objFolder.Files
If objRegExp.Test(objFile.Name) Then
If UCase(objFile.Name) <> UCase("123_temp_file.txt") Then
WScript.Echo "Found file [" & objFile.Path & "]"

objFile.Name = "123_temp_file.txt"

WScript.Echo " Rename into [" & objFile.Path & "]"
End If
End If
Next

On Error Resume Next

For Each objSubFolder In objFolder.SubFolders
If Err.Number = 0 Then
On Error Goto 0

ScanSubFolders objSubFolder
Else
Err.Clear
On Error Goto 0
WScript.Echo "Can't enumerate subfolders for folder [" & objFolder.Path & "]."
End If
Next
End Sub
'=============================================================================

Traveller124
22-06-2012, 15:47
Iska,
огромное Вам спасибо, за терпеливое пояснение и оперативное реагирование
поставленная цель достигнута :) , код работает.




© OSzone.net 2001-2012