Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Поиск файла и переименование (http://forum.oszone.net/showthread.php?t=237053)

Traveller124 21-06-2012 00:42 1937908

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

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

Iska 21-06-2012 02:27 1937932

Примерно так:
читать дальше »
Код:

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 1938528

Из письма в PM:
Цитата:

Цитата Traveller124
К сожалению, взял Ваш Код, вставив в 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. Определитесь, пожалуйста. Изначально Вы писали про:
Цитата:

Цитата Traveller124
Имеется папка Folder с подпапками. Необходимо произвести поиск файлов (в каждой папке он будет один), »

— ни о поиске файлов в самой папке, ни о рекурсивном поиске файлов ниже папок первого уровня вложенности речь Вами не велась.

Traveller124 22-06-2012 02:52 1938538

Iska, спсб за оперативный ответ.
Цитата:

Цитата Iska
1. Желательно указывать ссылкой, какой именно код имеется в виду. »

Ваше замечание обязательно учту и в дальнейшем буду указывать.

Цитата:

Цитата Iska
2. Сообщение:
...
выводящееся при таком запуске, »

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

Цитата:

Цитата Iska
Путь к папке указывается аргументом при вызове скрипта. »

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

Цитата:

Цитата Iska
3. Определитесь, пожалуйста. Изначально Вы писали про: »

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

Iska 22-06-2012 03:10 1938540

Цитата:

Цитата Traveller124
Вот так например objFolder = "D:\001\Folder" - понимаю, а вот что означает "указывается аргументом" - не понимаю. »

Например, Вы сохранили скрипт в «c:\Temp\new2.vbs». Запускаете командную строку. В ней пишете:
Код:

cscript.exe //nologo "c:\Temp\new2.vbs" "D:\001\Folder"
«D:\001\Folder» — это и будет аргумент скрипта.

Цитата:

Цитата Traveller124
Наверное я чуток не так написал, не исключаю, но когда я указал, что "Имеется папка 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 1938811

Iska,
огромное Вам спасибо, за терпеливое пояснение и оперативное реагирование
поставленная цель достигнута :) , код работает.


Время: 19:45.

Время: 19:45.
© OSzone.net 2001-