|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Раскидать xml файлы по папкам в зависимости от содержимого |
|
CMD/BAT - Раскидать xml файлы по папкам в зависимости от содержимого
|
Новый участник Сообщения: 3 |
Есть папка с 100+ xml файлами определенной структуры. И есть txt файл с такими строками:
11983247#UPRO 12007438#UPRO 24014125#UPRO 12001482#utor 96438959#utor 23997705560002#usxa 14317798#umtc 7567499#UMTC 62530665#usxa 57277613#usxa 55604374#umtc 43075037#utor 24038094#umtc Задача в том, чтобы bat-ник анализировал этот txt и раскладывал xml файлы по папкам следующим образом: если в xml файле значение поля okpo равно цифрам до #, то файл нужно переместить в папку, название которой после #. То есть если в папке есть xml со значением поля okpo равным 11983247 то этот xml нужно переместить в папку UPRO и так далее. xml файлы и txt в прилагаемом архиве |
|
Отправлено: 20:50, 31-01-2017 |
Ветеран Сообщения: 1274
|
Профиль | Отправить PM | Цитировать skuzi,
если уж так сильно надо на cmd (потому что не для него задача), сработает и это, если закрыть глаза на возможное (ну очень маловероятно) совпадение искомого числа в другой строке (не поля okpo) файла, про скорость можете забыть естественно: |
Отправлено: 03:13, 01-02-2017 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 3
|
Профиль | Отправить PM | Цитировать alpap, данный способ не работает, окно долго висит, потом пропадает, но ничего никуда не копирует
|
Отправлено: 09:21, 01-02-2017 | #3 |
Ветеран Сообщения: 2196
|
Профиль | Отправить PM | Цитировать skuzi, поменяйте в 4 строке %%b на %%a
|
Отправлено: 11:00, 01-02-2017 | #4 |
Ветеран Сообщения: 2196
|
Профиль | Отправить PM | Цитировать skuzi, если значение okpo не случайно в имени *.xml, то можно и так
п.с. батник и файлы д.б. в одной директории. |
|
Отправлено: 11:18, 01-02-2017 | #5 |
Новый участник Сообщения: 3
|
Профиль | Отправить PM | Цитировать sov44, этот батник наоборот создает папки с именем до #, то есть папку 11983247, а не папку UPRO
|
Отправлено: 14:56, 01-02-2017 | #6 |
Ветеран Сообщения: 2196
|
Профиль | Отправить PM | Цитировать skuzi, тогда так
@echo off <"raz.txt" (for /f "tokens=1-2 delims=#" %%a in ('more') do ( for /f "delims=" %%c in ('findstr /mc:"%%a" "*.xml"') do ( if not exist "%%b" (md "%%b")& >nul copy /y "%%c" "%%b\" ) ) ) exit |
Отправлено: 15:17, 01-02-2017 | #7 |
Ветеран Сообщения: 1274
|
Профиль | Отправить PM | Цитировать Цитата skuzi:
распаковал ваш архив на рабочий стол, там же bat (у меня в кодировке 866, но это не должно влиять, вообще поиск цифр идет), все имена оригинальные - ваши и они же используются в коде и при этом у меня все работает Файл 143142 |
|
Последний раз редактировалось alpap, 07-12-2017 в 15:07. Отправлено: 02:25, 02-02-2017 | #8 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Пусть будет и на WSH:
Скрытый текст
Option Explicit Dim strSourceFolder Dim strPatternFile Dim objFSO Dim objFile Dim objDictionary Dim strLine Dim arrParts Dim strKey Dim strDestFolder strSourceFolder = "C:\Мои проекты\0040\sso" strPatternFile = "C:\Мои проекты\0040\sso\raz.txt" Set objFSO = WScript.CreateObject("Scripting.FileSystemObject") If objFSO.FolderExists(strSourceFolder) Then If objFSO.FileExists(strPatternFile) Then Set objDictionary = WScript.CreateObject("Scripting.Dictionary") With objFSO.OpenTextFile(strPatternFile) Do Until .AtEndOfStream strLine = Trim(.ReadLine()) If InStr(strLine, "#") > 0 Then arrParts = Split(strLine, "#") If Not objDictionary.Exists(arrParts(0)) Then objDictionary.Add arrParts(0), arrParts(1) Else objDictionary.Item(arrParts(0)) = arrParts(1) End If End If Loop .Close End With For Each objFile In objFSO.GetFolder(strSourceFolder).Files If StrComp(objFSO.GetExtensionName(objFile.Name), "xml", vbTextCompare) = 0 Then WScript.Echo objFile.Name With WScript.CreateObject("Microsoft.XMLDOM") .load(objFile.Path) strKey = .selectSingleNode("/report/title/item[@name='okpo']").GetAttribute("value") End With If objDictionary.Exists(strKey) Then strDestFolder = objDictionary.Item(strKey) If Not objFSO.FolderExists(strDestFolder) Then objFSO.CreateFolder strDestFolder End If If Not objFSO.FileExists(objFSO.BuildPath(strDestFolder, objFile.Name)) Then WScript.Echo vbTab, "Move into [" & strDestFolder & "\]" objFile.Move strDestFolder & "\" Else WScript.Echo vbTab, "Can't move: destination file [" & objFSO.BuildPath(strDestFolder, objFile.Name) & "] already exists." End If End If End If Next objDictionary.RemoveAll Set objDictionary = Nothing Else WScript.Echo "Can't find pattern file [" & strPatternFile & "]." WScript.Quit 2 End If Else WScript.Echo "Can't find source folder [" & strSourceFolder & "]." WScript.Quit 1 End If Set objFSO = Nothing WScript.Quit 0 |
Отправлено: 06:41, 04-02-2017 | #9 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - [решено] Раскидать файлы по папкам согласно дате в имени файла | spkvvs | Скриптовые языки администрирования Windows | 17 | 24-01-2024 16:03 | |
CMD/BAT - [решено] Раскидать картинки по папкам | kingdeathart | Скриптовые языки администрирования Windows | 2 | 06-02-2016 16:02 | |
CMD/BAT - [решено] Раскидать файлы по папкам | Denn1982 | Скриптовые языки администрирования Windows | 1 | 08-07-2012 11:43 | |
CMD/BAT - [решено] Раскидывание фалов по папкам в зависимости от расширения | fashit | Скриптовые языки администрирования Windows | 4 | 23-01-2012 16:10 | |
Разное - EXCEL. Цвет ячеек в зависимости от содержимого | jeilous | Microsoft Office (Word, Excel, Outlook и т.д.) | 1 | 09-09-2011 14:07 |
|