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

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

Ответить
Настройки темы
VBS/WSH/JS - [решено] Перемещение файлов. Условие поиск слова в файле.

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


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

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


Изменения
Автор: Hixi
Дата: 30-05-2013
Помогите решить задачу на VBS.
Нужно найти определенный текст в текстовых файлах находящихся в одной директории.
При совпадении с определенным текстом переносить в указанный путь.

Если в файле найден текст "QWERTY" , то перенести этот файл в C:\QWERTY\"текущая дата"
Если в файле найден текст "ASDFGР" , то перенести этот файл в C:\ASDFGР\"текущая дата"
и т.д.

Необходимая задача уже решалась когда-то на CMD/BAT http://forum.oszone.net/nextnewesttothread-242495.html

Отправлено: 18:23, 30-05-2013

 

Ветеран


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

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


Цитата Hixi:
и т.д. »
Какова кодировка текстовых файлов (если в и т.д. попадёт кириллица)?

Цитата Hixi:
Необходимая задача уже решалась когда-то на CMD/BAT http://forum.oszone.net/nextnewesttothread-242495.html »
Почему не устраивает то решение?

Отправлено: 18:52, 30-05-2013 | #2



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

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


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


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

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


Прошу прощения, кириллица присутствует. Кодировка Dos-866
Нет возможности истользовать BAT. Необходимо решение на VBS.

Отправлено: 19:00, 30-05-2013 | #3


Ветеран


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

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


Цитата Hixi:
Прошу прощения, кириллица присутствует. »
Цитата Iska:
Какова кодировка текстовых файлов (если в и т.д. попадёт кириллица)? »
?

Цитата Hixi:
Если в файле найден текст "QWERTY" , то перенести этот файл в C:\QWERTY\"текущая дата"
Если в файле найден текст "ASDFGР" , то перенести этот файл в C:\ASDFGР\"текущая дата"
и т.д. »
Перечень «QWERTY», «ASDFGР» и «и т.д.» определён? Где будет находиться/задаваться — в самом скрипте, в параметрах скрипта, во внешнем текстовом файле (при большом количестве)?

Отправлено: 19:07, 30-05-2013 | #4


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


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

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


Цитата Iska:
Какова кодировка текстовых файлов (если в и т.д. попадёт кириллица)? »
? »
DOS-866

Цитата Iska:
Перечень «QWERTY», «ASDFGР» и «и т.д.» определён? Где будет находиться/задаваться — в самом скрипте, в параметрах скрипта, во внешнем текстовом файле (при большом количестве)? »
Перечень не определен, может дополняться/изменяться. Указывать лучше в параметрах скрипта (зачений не более 20)

Отправлено: 19:13, 30-05-2013 | #5


Ветеран


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

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


Hixi, пробуйте:
читать дальше »
Код: Выделить весь код
Option Explicit

Dim strSourceFolder
Dim strDestFolder

Dim objFile

Dim strText
Dim strPhrase

Dim strDate
Dim strDestPath


If WScript.Arguments.Count >= 1 Then
	strSourceFolder = WScript.CreateObject("WScript.Shell").CurrentDirectory
	strDestFolder   = "c:\"
	
	With WScript.CreateObject("Scripting.FileSystemObject")
		If .FolderExists(strDestFolder) Then
			WScript.Echo "Source folder:      [" & strSourceFolder & "]"
			WScript.Echo "Destination folder: [" & strDestFolder & "]"
			WScript.Echo "--------------------------------------------"
			
			strDate = GetLocalDate()
			
			For Each objFile In .GetFolder(strSourceFolder).Files
				If LCase(.GetExtensionName(objFile.Name)) = "txt" Then
					WScript.Echo "File: " & objFile.Path
					
					With objFile.OpenAsTextStream()
						strText = StrConvert(.ReadAll(), "windows-1251", "cp866")
						.Close
					End With
					
					For Each strPhrase In WScript.Arguments
						If InStr(1, strText, strPhrase, vbTextCompare) > 0 Then
							WScript.Echo Space(4) & "Phrase found: " & strPhrase
							
							strDestPath = .BuildPath(.BuildPath(strDestFolder, strPhrase), strDate)
							
							CreateFolderEx strDestPath
							objFile.Move .BuildPath(strDestPath, "\")
							
							WScript.Echo Space(4) & "Moved to folder [" & strDestPath & "]"
						End If
					Next
				End If
			Next
		Else
			WScript.Echo "Can't find destination folder [" & strDestFolder & "]"
		End If
	End With
Else
	WScript.Echo "Usage: cscript.exe //nologo """ & WScript.ScriptName & """ <Phrase 1> <Phrase 2> ... <Phrase N>"
End If

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

'=============================================================================
Function GetLocalDate()
	Dim objSWbemObjectEx
	
	With GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
		For Each objSWbemObjectEx In .ExecQuery("SELECT LocalDateTime FROM Win32_OperatingSystem")
			GetLocalDate = Left(objSWbemObjectEx.LocalDateTime, 8)
			Exit For
		Next
	End With
End Function
'=============================================================================

'=============================================================================
Sub CreateFolderEx(strPath)
	With WScript.CreateObject("Scripting.FileSystemObject")
		If Not .FolderExists(strPath) Then
			CreateFolderEx .GetParentFolderName(strPath)
			.CreateFolder strPath
		End If
	End With
End Sub
'=============================================================================

'=============================================================================
' HKEY_CLASSES_ROOT\MIME\Database\Charset
' cp866, windows-1251, koi8-r, unicode, utf-8, _autodetect
'=============================================================================
Function StrConvert(ByVal strText, ByVal strSourceCharset, ByVal strDestCharset)
	Const adTypeText      = 2
	Const adModeReadWrite = 3
	
	
	With WScript.CreateObject("ADODB.Stream")
		.Type      = adTypeText
		.Mode      = adModeReadWrite
		
		.Open
		
		.Charset   = strSourceCharset
		.WriteText strText
		
		.Position  = 0
		.Charset   = strDestCharset
		StrConvert = .ReadText
		
		.Close
	End With
End Function
'=============================================================================

Пример вызова скрипта:
Код: Выделить весь код
cscript.exe //nologo "Script.vbs" "рабы не" Мама
Возможный результат:
читать дальше »
Код: Выделить весь код
Source folder:      [E:\Песочница\0266]
Destination folder: [c:\]
--------------------------------------------
File: E:\Песочница\0266\0001.txt
    Phrase found: Мама
    Moved to folder [c:\Мама\20130531]
File: E:\Песочница\0266\0002.txt
    Phrase found: рабы не
    Moved to folder [c:\рабы не\20130531]
File: E:\Песочница\0266\0003.txt
Это сообщение посчитали полезным следующие участники:

Отправлено: 06:53, 31-05-2013 | #6


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


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

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


Спасибо! а если требуется вывод данных из файла (текста для поиска и при совпадении перемещение в указанную заранее дирректорию, нужна привязка текст\путь (текст для поиска "привет" при совпадении переместить в C:\dsa\123, файлы с текстом "Пока" при совпадении переместить в D:\фыва\908 ))?

Отправлено: 10:36, 31-05-2013 | #7


Ветеран


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

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


Hixi, пожалуйста, ещё раз и по-русски: не могу выудить смысл из Вашего поста.

Отправлено: 11:04, 31-05-2013 | #8


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


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

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


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

Родина = C:\try\"год"\"месяц"\"год_месяц_день"\прием
Горы = E:\asd\"год"\"месяц"\"год_месяц_вчерашний день"\прием
Привет = D:\789
Тополь-М = F:\14\тру

Последний раз редактировалось Hixi, 31-05-2013 в 16:17.


Отправлено: 11:40, 31-05-2013 | #9


Ветеран


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

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


"год", "месяц", "год_месяц_день" — это, я так понял, шаблоны? В которые при обработке должны подставляться значения текущей даты?

Отправлено: 20:29, 31-05-2013 | #10



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] CMD Перемещение файлов. Условие поиск слова в файле xsanekk Скриптовые языки администрирования Windows 2 12-09-2012 16:49
CMD/BAT - Смена слова в нужном файле. Wookie-Altai Скриптовые языки администрирования Windows 0 02-06-2012 18:23
Поиск слова в txt затем поиск по маске "(383)" и вывод инфы rustoss AutoIt 10 29-09-2011 15:27
CMD/BAT - [решено] Условие с применением поиска в файле Starter1 Скриптовые языки администрирования Windows 3 22-06-2011 18:18
CMD/BAT - [решено] Поиск файлов и перемещение каталога djvall Скриптовые языки администрирования Windows 3 04-02-2011 09:32




 
Переход