PDA

Показать полную графическую версию : Поиск строки в файлах *.xml с кодировкой 65001 (UTF-8) без BOM


053131
03-04-2015, 00:15
Нужна помощь в решении задачи.

Имеется папка с файлами xml с кодировкой 65001 (UTF-8) без BOM в которых есть строки х912хм, х812хх, л845ка и т.д.
Все эти строки я записал в папку 1.txt
Теперь код программы, который берет строку из файла 1.txt и сверяет её на наличие в файлах xml, если такая строка имеется, то перенести этот файл в другую папку.

@echo off

set "list=D:\12345678\1.txt"
set "from=D:\12345678"
set "to=D:\12345678\sort"

for /f "usebackq delims=" %%i in ("%list%") do (
for /f "delims=" %%j in ('findstr/ilmc:"%%i" "%from%\*.xml"') do (
for /f "delims=" %%k in ('2^>nul dir/a-d/b "%from%\%%~nj.*"') do (
if "%%~nk" equ "%%~nj" move/y "%from%\%%k" "%to%\"
)
)
)

pause

exit/b


Данный код программы не работает и я не могу решить ее, хотя если я в файле 1.txt оставлю только цифры, то код программы находит строку и переносит файл.

Georgio
03-04-2015, 00:26
@echo off

set "list=D:\12345678\1.txt"
set "from=D:\12345678"
set "to=D:\12345678\sort"

for /f "usebackq delims=" %%i in ("%list%") do (
for /f "delims=" %%j in ('2^>nul dir/a-d/b "%from%\*.xml"') do (
for /f %%k in ('^<"%from%\%%j" find/i "%%i"') do (
for /f "delims=" %%l in ('2^>nul dir/a-d/b "%from%\%%~nj.*"') do (
if "%%~nl" equ "%%~nj" move/y "%from%\%%l" "%to%\"
)
)
)
)

exit/b

Все эти строки я записал в папку 1.txt »


Список сохраните в кодировке UTF-8.

053131
03-04-2015, 00:52
Пробовал, не ищет.

Georgio
03-04-2015, 01:27
Пробовал, не ищет. »


Список сохраните в кодировке UTF-8. »

053131
03-04-2015, 08:27
Я сохранял все равно не получается.

Я прикрепил файлы у кого есть время может посмотрите.

Iska
03-04-2015, 16:17
Я сохранял все равно не получается. »
У меня получается на Ваших файлах:
C:\Песочница\069>0001.cmd
move /y "C:\Песочница\069\0d6a8f8a577dcdafcaf5afec8a963048.xml" "C:\Песочница\069\01\"
move /y "C:\Песочница\069\1c0d73e7d3a437fc6d2c65b30f6e920a.xml" "C:\Песочница\069\01\"

053131
03-04-2015, 21:57
Что получается? просто перенести файлы?

Iska
04-04-2015, 00:01
Что получается? »
Корректное исполнение кода пакетного файла, приведённого выше (http://forum.oszone.net/post-2491188.html#post2491188) коллегой Georgio. На тех файлах, которые Вы выложили. По тексту, приведённому в файле «1.txt», находятся файлы «0d6a8f8a577dcdafcaf5afec8a963048.xml» и «1c0d73e7d3a437fc6d2c65b30f6e920a.xml», каковые затем перемещаются в папку, указанную в переменной окружения «to» в коде вышеуказанного пакетного файла.

Georgio
04-04-2015, 18:49
Команда "FIND" в файлах в кодировке UTF-8 "копается", но вот только непонятно, как она "относится" к наличию в этих файлах кириллицы. Поэтому попробуйте такой вариант:


@echo off

set "list=D:\12345678\1.txt"
set "from=D:\12345678"
set "to=D:\12345678\sort"

powershell "gci '%from%' -filter '*.xml'|%%{$x=$_.basename;gc $_.fullname|%%{$y=$_;gc '%list%'|%%{if($y.contains($_)){[array]$z+=$x;clv x}}}};$z|%%{mi ('%from%\'+$_+'.*') '%to%'}"

exit/b 0


.

053131
05-04-2015, 01:24
Georgio, я извиняюсь, у меня все получилось, я не внимательно посмотрел код который вы написали, он прекрасно работает, также код через оболочку powershell работает, даже чуть быстрее.
Большое спасибо Вам. :-)




© OSzone.net 2001-2012