• Администрация SafeZone приветствует вас на нашем форуме!
    Если вы больше не желаете видеть рекламу при просмотре тем и сообщений - то достаточно просто зарегистрироваться. Для зарегистрированных пользователей реклама не отображается.

[CMD] Поиск слова в xml файле и вывод на экран

Maksim222

Новый пользователь
Сообщения
10
Симпатии
0
#1
Доброе время суток! Помогите с написанием батника, пожалуйста. Не силен в батниках, но очень надо.
Необходимо найти в папке все XML файлы в которых встречается выражение " КодРезПроверки="99" " и вывести файлы, в которых присутствует это выражение , на экран с указанием количества найденных файлов .
Я попробовал прописать код (ниже), но он не помогает. . В командной строке лишь выводятся все файлы которые лежат в папке " D:\440\XML\ " и пишет что " НЕ НАЙДЕН ФАЙЛ: КОДРЕЗПРОВЕРКИ=99 "

Сам код:
CMD/BATCH:
find "КодРезПроверки="99"" "D:\440\XML\*.xml"
pause

:end
 
Последнее редактирование модератором:

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
5,735
Симпатии
5,639
#2
Здравствуйте, @Maksim222 !

Добро пожаловать на SafeZone.

CMD/BATCH:
@echo off
SetLocal EnableExtensions

:: Путь к папке для поиска
set Folder=FILES

:: Маска для поиска
set Mask=XML

:: Текст для поиска
set "text=КодРезПроверки=\"99\""

set cnt=0
For /F "delims=" %%a in ('dir /b /a-d "%Folder%\*.%Mask%"') do type "%Folder%\%%a" | >NUL findstr /R "%text%" && (echo "%%a"& set /a cnt+=1)
echo Total files = %cnt%

pause
 

Maksim222

Новый пользователь
Сообщения
10
Симпатии
0
#3
Спасибо за ответ! Батник отрабатывает, но все равно пишет что Total files = 0 (а нужные файлы точно есть в папке поиска). Единственный момент - xml файлы идут в кодировке Windows-1251, а батник в OEM866. Необходимо в ваш код добавить команду для смены кодировки ?
 
Последнее редактирование модератором:

Maksim222

Новый пользователь
Сообщения
10
Симпатии
0
#4
Спасибо за ответ! Батник отрабатывает, но все равно пишет что Total files = 0 (а нужные файлы точно есть в папке поиска). Единственный момент - xml файлы идут в кодировке Windows-1251, а батник в OEM866. Необходимо в ваш код добавить команду для смены кодировки ?
В ваш код я добавил только путь

:: Путь к папке для поиска
set Folder=D:\440\XML

К сожалению, сам файл не могу скинуть вам. Могу только скрин со структурой xml.
 

Вложения

Последнее редактирование:

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
5,735
Симпатии
5,639
#5
Единственный момент - xml файлы идут в кодировке Windows-1251, а батник в OEM866.
Что-то я этого не учёл.

Полагаю, одними средствами cmd тут не решить задачу. Всё из-за кавычек в тексте для поиска и из-за багов утилит.
Find.exe не принимает такие кавычки. А FindStr.exe, похоже, некорректно работает с ANSI символами, не находит их.

Можно сделать с привлечением встроенного в систему языка JScript:

search.js (Win-1251)
JavaScript:
var ts, s, fold, text;

// путь к папке (полный или относительный)
fold = 'FILES';

// искомый текст
text = 'КодРезПроверки="99"';

var fso = new ActiveXObject("Scripting.FileSystemObject");

for (var e = new Enumerator(fso.getFolder(fold).files); !e.atEnd(); e.moveNext()) {
  ts = fso.OpenTextFile(e.item(), 1, false);
  s = ts.ReadAll();
  if (-1 != s.indexOf(text))
    WScript.Echo(e.item());
  ts.close();
}
test.cmd (oem-866)
CMD/BATCH:
@echo off
SetLocal EnableExtensions

set cnt=0
For /F "delims=" %%a in ('cscript //nologo search.js') do echo %%a& set /a cnt+=1
echo Total files = %cnt%
pause
 

Maksim222

Новый пользователь
Сообщения
10
Симпатии
0
#6
Пока игрался с вашим батником, то понял что он может найти любые цифры их XML, а также слова на английском. Т.е. русские символы игнорируются. Если изменить кодировку в XML файле, то батник работает отлично!
 
Последнее редактирование модератором:

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
5,735
Симпатии
5,639
#7
В последнем варианте, js-скрипт должен быть в кодировке Win-1251, тогда он сможет найти и текст в соответствующей кодировке.
 

Maksim222

Новый пользователь
Сообщения
10
Симпатии
0
#8
Спасибо большое, буду пробовать!

[mod]@Maksim222, при ответе не нужно цитировать весь предыдущий пост. И так понятно, что ответ относится к нему.[/mod]
 
Последнее редактирование модератором:
Сверху Снизу