Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Поиск строки в файлах *.xml с кодировкой 65001 (UTF-8) без BOM (http://forum.oszone.net/showthread.php?t=297856)

053131 03-04-2015 00:15 2491182

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

Имеется папка с файлами 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 2491188

Код:

@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

Цитата:

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


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

053131 03-04-2015 00:52 2491196

Пробовал, не ищет.

Georgio 03-04-2015 01:27 2491201

Цитата:

Цитата 053131
Пробовал, не ищет. »


Цитата:

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


053131 03-04-2015 08:27 2491254

Вложений: 3
Я сохранял все равно не получается.

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

Iska 03-04-2015 16:17 2491424

Цитата:

Цитата 053131
Я сохранял все равно не получается. »

У меня получается на Ваших файлах:
Цитата:

Код:

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 2491539

Что получается? просто перенести файлы?

Iska 04-04-2015 00:01 2491566

Цитата:

Цитата 053131
Что получается? »

Корректное исполнение кода пакетного файла, приведённого выше коллегой Georgio. На тех файлах, которые Вы выложили. По тексту, приведённому в файле «1.txt», находятся файлы «0d6a8f8a577dcdafcaf5afec8a963048.xml» и «1c0d73e7d3a437fc6d2c65b30f6e920a.xml», каковые затем перемещаются в папку, указанную в переменной окружения «to» в коде вышеуказанного пакетного файла.

Georgio 04-04-2015 18:49 2491790

Команда "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 2491901

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


Время: 03:18.

Время: 03:18.
© OSzone.net 2001-