VBS/WSH/JS - [решено] Нужна помощь в корекции скрипта для копирования файлов

Ответить
 • Просмотры: 1
Аватара пользователя
streamrider

VBS/WSH/JS - [решено] Нужна помощь в корекции скрипта для копирования файлов

Сообщение streamrider »

Добрый день уважаемые форумчане знатоки языка VBS . Ребята в общем проблема такая я только учусь писать скрипты и решил написать скрипт для поиска файлов по маске и копирования в созданную папку так вот проблема в том что он у меня ищет только если есть конкретный путь а если его нет то сразу "ошибка" Как сделать что бы он находил сам директорию на дисках без указания точного пути. Но самое важное если указать диск C:\*.txt то он ищет только на "C" а как сделать что бы он искал по всему диску "C" включая под каталоги ?



В общем то вопроса 2 :

1)Как мне указать относительный путь

2)И как сделать поиск по всему каталогу



Вот мой код скрипта :



set FSO=CreateObject("Scripting.FileSystemObject")

set file=fso.getfile(wscript.scriptfullname)

FSO.CreateFolder file.parentfolder+"\BACKUP"

FSO.CopyFile "C:\*.txt", file.parentfolder+"\BACKUP"

msgbox "Все комманды успешно выполнены"
Аватара пользователя
Iska

Re: VBS/WSH/JS - [решено] Нужна помощь в корекции скрипта для копирования файлов

Сообщение Iska »

streamrider, в FSO нет средств для поиска по маске, только перебором. Вариант разбора и использования результатов «DIR » возможен, но может приводить к некорректным результатам — я его не рекомендую. То, что привели Вы («FSO.CopyFile "C:\*.txt"») — это не поиск, а отбор файлов.




Цитата streamrider:



Но самое важное если указать диск C:\*.txt то он ищет только на "C" а как сделать что бы он искал по всему диску "C" включая под каталоги ?
VBS/WSH/JS - [решено] Нужна помощь в корекции скрипта для копирования файлов




Посредством FSO — никак. В принципе, есть разные варианты. Но желательно услышать конкретную задачу целиком, в виде: «мне нужно сделать то-то и то-то».
Аватара пользователя
Iska

Re: VBS/WSH/JS - [решено] Нужна помощь в корекции скрипта для копирования файлов

Сообщение Iska »

SendMessage, спасибо, ясно. Ну, дык, есть же свойство «.Attributes», есть DeleteFile с параметром Force — какие проблемы.



streamrider, примерно так:


читать дальше »




Код:

Код: Выделить всё

Option Explicit
Const strFileName = "hosts"
Const SystemFolder = 1
Const HKEY_LOCAL_MACHINE = &H80000002
Dim strPath
Dim strFullFileName
Dim strNewFullFileName
With WScript.CreateObject("Scripting.FileSystemObject")
	If WScript.CreateObject("WbemScripting.SWbemLocator").ConnectServer(".", "root\default").Get("StdRegProv").GetStringValue( _
		HKEY_LOCAL_MACHINE, "SYSTEM\CurrentControlSet\Services\Tcpip\Parameters", "DataBasePath", strPath) = 0 Then
		WScript.Echo "Found parameter [DataBasePath]"
	Else
		strPath = .BuildPath(.GetSpecialFolder(1).Path, "drivers\etc")
		WScript.Echo "Can't found parameter [DataBasePath], try default path as [" & strPath & "]"
	End If
	strFullFileName    = .BuildPath(strPath, strFileName)
	strNewFullFileName = .BuildPath(.GetParentFolderName(WScript.ScriptFullName), strFileName)
	If .FileExists(strFullFileName) Then
		If .FileExists(strNewFullFileName) Then
			.DeleteFile strNewFullFileName, True
		End If
		.CopyFile strFullFileName, strNewFullFileName, True
		If .FileExists(strNewFullFileName) Then
			WScript.Echo "Found [" & strFullFileName & "] and copied to [" & strNewFullFileName & "]"
		Else
			WScript.Echo "Found [" & strFullFileName & "] but can't copy to [" & strNewFullFileName & "]"
		End If
	Else
		WScript.Echo "File [" & strFullFileName & "] not found"
	End If
End With
WScript.Quit 0
Аватара пользователя
Kazun

Re: VBS/WSH/JS - [решено] Нужна помощь в корекции скрипта для копирования файлов

Сообщение Kazun »

http://blogs.technet.com/b/heyscript...-computer.aspx




Только изменить WMI запрос,указав диск C: и имя файла.



("Select * From CIM_DataFile Where FileName = 'Budget' " & _

"AND Extension = 'txt' AND Drive = '" & strDrive & "'")





А для случая с hosts,можно запросить ключ реестра и определить папку - HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\DatabasePath
Аватара пользователя
streamrider

Re: VBS/WSH/JS - [решено] Нужна помощь в корекции скрипта для копирования файлов

Сообщение streamrider »

Iska, Мне нужно сделать скрипт что бы он искал нужный мне файл на диске "C" включая под каталоги и скопировал его мне в папку .



Задача в общем такая мне нужен скрипт который при запуске искал файл hosts в директории Windows и потом найдя его скопировал его мне в мою папку . Это все нужно мне для моей программы которая редактирует с нужными параметрами это файлик а поскольку прямой доступ не разрешен к папке system32 мне нужно его скопировать и потом прога получив доступ вносила изменения и снова заменяла его обратно . ПО готово а вот скрипт нет (((
Аватара пользователя
Iska

Re: VBS/WSH/JS - [решено] Нужна помощь в корекции скрипта для копирования файлов

Сообщение Iska »

Kazun, только чертовски медленно будет искать.



streamrider, зачем его искать, если всегда известно, где он находится?


читать дальше »




Код:

Код: Выделить всё

Option Explicit
Const SystemFolder = 1
Dim strPath
With WScript.CreateObject("Scripting.FileSystemObject")
	strPath = .BuildPath(.GetSpecialFolder(1).Path, "drivers\etc\hosts")
	If .FileExists(strPath) Then
		WScript.Echo "Found: " & strPath
	End If
End With
WScript.Quit 0
Аватара пользователя
SendMessage

Re: VBS/WSH/JS - [решено] Нужна помощь в корекции скрипта для копирования файлов

Сообщение SendMessage »

В дополнение. Копировать лучше методом CopyHere. Поскольку у FSO будут проблемы с файлами read only. Пример:



Код:

Код: Выделить всё

Option Explicit
Dim strMyFolderPath
Dim objShell
Dim objMyFolder
Dim objHostsFolder
strMyFolderPath = "z:\myfolder"
Set objShell = CreateObject("Shell.Application")
Set objMyFolder = objShell.NameSpace(strMyFolderPath)
Set objHostsFolder = objShell.NameSpace(objShell.NameSpace(&H25).ParseName("drivers\etc"))
' Копирование:
    ' из системной в свою
objMyFolder.CopyHere objHostsFolder.Self.Path & "\hosts", 20
    ' из своей в системную
objHostsFolder.CopyHere objMyFolder.Self.Path & "\hosts", 20
Аватара пользователя
streamrider

Re: VBS/WSH/JS - [решено] Нужна помощь в корекции скрипта для копирования файлов

Сообщение streamrider »

Цитата SendMessage:



Копировать лучше методом CopyHere. Поскольку у FSO будут проблемы с файлами read only.
VBS/WSH/JS - [решено] Нужна помощь в корекции скрипта для копирования файлов




Поясните, пожалуйста.



streamrider, я тут посмотрел… Да, обязательно надо читать реестр и искать файл по указанному пути:


Цитата Kazun:



А для случая с hosts,можно запросить ключ реестра и определить папку - HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\DatabasePath
VBS/WSH/JS - [решено] Нужна помощь в корекции скрипта для копирования файлов
Аватара пользователя
Iska

Re: VBS/WSH/JS - [решено] Нужна помощь в корекции скрипта для копирования файлов

Сообщение Iska »

Iska, если файл назначения имеет установленный атрибут «read only», метод objFSO.CopyFile (а также и objFSO.GetFile(filename).Copy) не сможет заменить этот файл, даже если параметр OverWrite выставлен True (что, впрочем, и есть по умолчанию).
Аватара пользователя
SendMessage

Re: VBS/WSH/JS - [решено] Нужна помощь в корекции скрипта для копирования файлов

Сообщение SendMessage »

Iska, если файл назначения имеет установленный атрибут «read only», метод objFSO.CopyFile (а также и objFSO.GetFile(filename).Copy) не сможет заменить этот файл, даже если параметр OverWrite выставлен True (что, впрочем, и есть по умолчанию).
Ответить

Вернуться в «Скриптовые языки администрирования Windows»