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

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

Ответить
Настройки темы
CMD/BAT - [решено] Проверка файла на определнное содержимое и перемещение его.

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


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

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


Изменения
Автор: скуби_ДУ
Дата: 27-07-2011
Описание: исправил название
Имеем папку Upload в ней около 10тыщ маловесных файлов xml формата
Необходимо файлы в которых содержится

<КодСтроки>10</КодСтроки>
<Сумма>0.00</Сумма>

скопировать либо переместить - неважно , в подпапку "Выборка" папки "Upload"

заранее спасибо всем гуру

Отправлено: 13:15, 27-07-2011

 

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


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

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


все файлы естественно с разными именами.
только одинаковое расширение...

Последний раз редактировалось скуби_ДУ, 27-07-2011 в 13:41.


Отправлено: 13:16, 27-07-2011 | #2



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

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


Ветеран


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

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


скуби_ДУ, Вам это действительно надо будет делать на регулярной основе и программно? Или это однократное действие?

Отправлено: 14:16, 27-07-2011 | #3


Ветеран


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

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


скуби_ДУ, указанные строки должны идти строго подряд или просто содержаться в файле?

Отправлено: 15:27, 27-07-2011 | #4


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


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

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


сейчас это однократное действие которое возможно и будет регулярным раз в месяц при естественно уже меньшем кол-ве файлов. строки должны идти именно в такой последовательности - собственно во всех файлах значение этой суммы либо 0 - и их отобрать надо - в других файлах оно отлично от нуля и эти файлы не нужны

Отправлено: 08:29, 28-07-2011 | #5


Ветеран


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

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


На jscript или powershell реализуется довольно просто. А вот в bat выискивать многострочный блок текста - нетривиальная задача.

Отправлено: 09:38, 28-07-2011 | #6


Googler


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

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


как минимум, для CMD нужна кодировка исходных файлов
читать дальше »
Код: Выделить весь код
@echo off
SetLocal EnableDelayedExpansion

set "D1=C:\Upload"
set "D2=C:\Upload\Выборка"
set "$1=<КодСтроки>10</КодСтроки>"
set "$2=<Сумма>0.00</Сумма>"

if not exist "%D2%" MD "%D2%"
pushd "%D1%" && (
for /f "tokens=1,2* delims=:" %%a in ('findstr/xnc:"!$1!" /c:"!$2!" *.xml') do (
if "!$c!"=="!$1!" if "%%c"=="!$2!" if "!$a!"=="%%a" set/a "$=%%b-!$b!"& if !$! equ 1 move/-y "%%a" "%D2%"
set "$a=%%a"& set "$b=%%b"& set "$c=%%c"))

Последний раз редактировалось amel27, 28-07-2011 в 12:49. Причина: пример

Это сообщение посчитали полезным следующие участники:

Отправлено: 09:51, 28-07-2011 | #7


Старожил


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

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


Мой вариант:
Код: Выделить весь код
@Echo Off
SetLocal EnableDelayedExpansion
Set TargetDir=D:\TEMP\Testing\Upload

Set i=0
If Not Exist "%TargetDir%\Выборка" Md "%TargetDir%\Выборка"
For /F "tokens=*" %%F In ('Dir "%TargetDir%\*.xml" /A-D /B') Do (
Grep -o "<КодСтроки>10</КодСтроки>" "%TargetDir%\%%F">nul&&^
Grep -o "<Сумма>0.00</Сумма>" "%TargetDir%\%%F">nul&&^
Move /Y "%TargetDir%\%%F" "%TargetDir%\Выборка\%%F"&&Set /A i+=1
Title Файлов перемещено !i!
)
Echo Работа завершена
Pause>nul
Заменяете значение TargetDir на свой путь, если не нужна индикация количества обработанных файлов - убираете SetLocal EnableDelayedExpansion и всё, относящееся к счётчику. По идее, должно работать с любой поддерживаемой grep кодировкой, я проверял на 1251. Сам скрипт сохранить в 866 для работы с кириллическими путями.
Для работы скрипта нужен grep, входящий в пакет утилит GnuWin32 core utils. Скачать его можно здесь (сам grep и нужные dll) или здесь (официальная страница на sourceforge)

Последний раз редактировалось Anonymоus, 28-07-2011 в 23:09.

Это сообщение посчитали полезным следующие участники:

Отправлено: 22:54, 28-07-2011 | #8


Googler


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

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


Цитата Anonymоus:
Для работы скрипта нужен grep, входящий в пакет утилит GnuWin32 core utils.»
тогда уж сразу вариант на AWK:
Код: Выделить весь код
@for /f "delims=" %%a in (
'gawk "/<КодСтроки>10<\/КодСтроки>/ {getline;if ($0~/<Сумма>0.00<\/Сумма>/){print FILENAME;nextfile}}" *.xml'
) do move/-y "%%a" ".\Upload"

Отправлено: 07:01, 29-07-2011 | #9


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


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

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


спасибо анонимоусу - все отлично сработало...

Отправлено: 11:40, 29-07-2011 | #10



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - Перемещение и переименовывание файла sanat Скриптовые языки администрирования Windows 7 19-06-2013 01:33
CMD/BAT - [решено] Переименовывание файла. В пути есть пробелы. starzkv Скриптовые языки администрирования Windows 9 08-02-2011 11:52
CMD/BAT - Скачивание файла и проверка на отличия от файла на сервере. maslovt Скриптовые языки администрирования Windows 2 08-05-2010 19:54
Прочее - Как изменить содержимое файла medvedkovo Общий по Linux 8 27-03-2010 17:34
Файл подкачки и его содержимое Andy33 Хочу все знать 13 11-05-2009 01:07




 
Переход