Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - Поиск и замена файлов.

Ответить
Настройки темы
VBS/WSH/JS - Поиск и замена файлов.

Новый участник


Сообщения: 1
Благодарности: 0

Профиль | Отправить PM | Цитировать


Вообщем у меня такая проблема!

Нужно зделать так чтобы искало по всем разделам и найденые файлы заменяло файлом из пути указаной в скрипте.

Есть два скрипта у меня и никак не получаеться их связать.

Первый скрипт ищет файлы и удаляет их
Второй скрипт ищет файл и заменяет только первый найденый
А мне нужно заменять все найденые файлы на всех разделах.



Код: Выделить весь код
Option Explicit
'Dim objArgs
Dim strFileName
 
'If Not WScript.Arguments.Named.Exists("FileName") Then
'    WScript.Echo "Using: " & WScript.ScriptName & " /FileName:<file for find>"
'    WScript.Quit 1
'End If

'strFileName = WScript.Arguments.Named.Item("FileName")

strFileName = "help.txt" ' — имя файла для поиска писать здесь
Dim objFSO
Dim objDrive
ReDim arrPaths(0)
Dim i
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
arrPaths(LBound(arrPaths)) = False
For Each objDrive In objFSO.Drives
If objDrive.DriveType = 2 Then
If objDrive.IsReady Then
FindInSubFolders objDrive.RootFolder, strFileName
End If
End If
Next
If arrPaths(LBound(arrPaths)) Then
'WScript.Echo "" & strFileName & ""
For i = LBound(arrPaths) + 1 To UBound(arrPaths)
'WScript.Echo arrPaths(i)

 
objFSO.DeleteFile arrPaths(i)
 
 
Next
Else
WScript.Echo "Not found paths for file [" & strFileName & "]."
End If
Set objFSO = Nothing
WScript.Quit 0
 
Sub FindInSubFolders(objFolderForFind, strFileName)
Dim objFolder
'WScript.Echo objFolderForFind.Path
If objFSO.FileExists(objFSO.BuildPath(objFolderForFind, strFileName)) Then
ReDim Preserve arrPaths(Ubound(arrPaths) + 1)
arrPaths(LBound(arrPaths)) = True
arrPaths(UBound(arrPaths)) = objFSO.BuildPath(objFolderForFind, strFileName)
'WScript.Echo "Found file [" & strFileName & "] on folder [" & objFolderForFind.Path & "]"
End If
On Error Resume Next
For Each objFolder In objFolderForFind.SubFolders
If Err.Number = 0 Then
FindInSubFolders objFolder, strFileName
Else
Err.Clear
'WScript.Echo "Can't enumerate subfolders for folder [" & objFolderForFind.Path & "]"
End If
Next
On Error Goto 0
End Sub
Код: Выделить весь код
Option Explicit
 
 
Dim objFSO
Dim objDrive
Dim strFileNameForFind
Dim boolDone
 
 
strFileNameForFind = "help.txt"                                    ' Имя файла для поиска.

Set objFSO   = WScript.CreateObject("Scripting.FileSystemObject")
Set objDrive = objFSO.GetDrive("h:")                    ' Буква Раздела

WScript.Echo "Find on drive " & objDrive.DriveLetter & ":..."
 
boolDone = False
ScanSubFolders objDrive.RootFolder, strFileNameForFind               ' Вызываем процедуру поиска
                                                                     ' для корневой папки этого тома.
                                                                     ' Обработка вложенных папок будет
                                                                     ' вестись рекурсивно.

Set objDrive = Nothing
Set objFSO   = Nothing
 
WScript.Quit 0
'=============================================================================

'=============================================================================
Sub ScanSubFolders(objFolder, strFileName)
    Dim objSubFolder
    Dim strFullFileName
 
                                         ' Выводим путь обрабатываемой папки (для
                                                                     ' отладки; имеет смысл закомментировать).
    
    strFullFileName = objFSO.BuildPath(objFolder.Path, strFileName)  ' Строим полный путь к файлу.
    
    If objFSO.FileExists(strFullFileName) Then                       ' Файл существует?
        WScript.Echo vbTab & "Found as [" & strFullFileName & "], copying..."
 
                                                                     ' Копируем файл
        objFSO.CopyFile objFSO.BuildPath("d:\", strFileName), strFullFileName, True
        boolDone = True
 
        Exit Sub
    End If
 
    On Error Resume Next                                             ' Обрабатываем ошибки, возможные в случае,
                                                                     ' когда нет доступа к содержимому папки
                                                                     ' (пример - «System Volume Information».
    For Each objSubFolder In objFolder.SubFolders
        If Err.Number = 0 Then                                       ' Удалось получить доступ к содержимому папки?
            On Error Goto 0                                          ' Восстанавливаем стандартную обработку ошибок
            
            If Not boolDone Then
                ScanSubFolders objSubFolder, strFileName             ' Вызываем процедуру поиска для каждой из подпапок.
            End If
        Else                                                         ' Если не удалось —
            Err.Clear                                                ' сбрасываем состояние ошибки,
            On Error Goto 0                                          ' восстанавливаем стандартную обработку ошибок и движемся дальше.
            WScript.Echo "Can't enumerate subfolders for folder [" & objFolder.Path & "]."
        End If
    Next
End Sub

Отправлено: 02:54, 26-06-2011

 

Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


Цитата Drotik:
чтобы искало по всем разделам и найденые файлы заменяло файлом из пути указаной в скрипте »
Код: Выделить весь код
WScript.Echo FindReplaceFileByName ("file.txt","C:\TEST\test.txt")

Function FindReplaceFileByName (strFileName, strFilePath)
  Dim FSO, WMI, col, obj, str

  Set FSO = CreateObject("Scripting.FileSystemObject")
  Set WMI = GetObject("winmgmts:\\.\root\cimv2")

  For Each obj In FSO.Drives
    If obj.DriveType=2 And obj.IsReady Then
      str = str &"Drive='"& obj.DriveLetter &":' OR "
    End If
  Next

  For Each obj In WMI.ExecQuery("SELECT Name From CIM_DataFile Where ("& Mid(str,1,Len(str)-4) &") AND Name LIKE '%\\"& strFileName &"'")
'   WScript.Echo obj.Name
    FSO.CopyFile strFilePath, obj.Name, vbTrue
    FindReplaceFileByName = FindReplaceFileByName + 1
  Next
End Function

Отправлено: 08:21, 27-06-2011 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 5
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата amel27:
WScript.Echo FindReplaceFileByName ("file.txt","C:\TEST\test.txt")
Function FindReplaceFileByName (strFileName, strFilePath)
Dim FSO, WMI, col, obj, str
Set FSO = CreateObject("Scripting.FileSystemObject")
Set WMI = GetObject("winmgmts:\\.\root\cimv2")
For Each obj In FSO.Drives
If obj.DriveType=2 And obj.IsReady Then
str = str &"Drive='"& obj.DriveLetter &":' OR "
End If
Next
For Each obj In WMI.ExecQuery("SELECT Name From CIM_DataFile Where ("& Mid(str,1,Len(str)-4) &") AND Name LIKE '%\\"& strFileName &"'")
' WScript.Echo obj.Name
FSO.CopyFile strFilePath, obj.Name, vbTrue
FindReplaceFileByName = FindReplaceFileByName + 1
Next
End Function »
а как сделать так чтоб скрипт работал по маске?
например есть куча файлов с расширением *.jpg на наске С: и файл с тем же расширением на флэшке. Нужно что бы при запуске, скрипт копировал файл с флэшки и заменял найденые по маске + сохранял имя файла. Возможно ли такое?

Отправлено: 18:07, 24-04-2014 | #3



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - Поиск и замена файлов.

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Поиск и замена текста ajakzs Скриптовые языки администрирования Windows 18 08-08-2013 16:10
CMD/BAT - [решено] Поиск, остановка процесса, поиск и замена файла на разных дисках Gawr33 Скриптовые языки администрирования Windows 11 23-04-2011 23:09
CMD/BAT - [решено] Поиск, остановка процесса, поиск и замена файлов на разных дисках 4zz Скриптовые языки администрирования Windows 2 21-02-2011 16:07
C/C++ - [решено] Поиск и замена текста Simpler Программирование и базы данных 15 01-12-2010 16:03
Разное - поиск и замена ansslecter Программное обеспечение Windows 1 06-07-2010 16:03




 
Переход