Имя пользователя:
Пароль:
 | Правила  

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

Ответить
Настройки темы
CMD/BAT - [решено] Batник по переносу файлов при наличии русского слова

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


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

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


Добрый день, подскажите пожалуйста.
Мне нужно создать батник, который из папки D:\IN
перемещал в папку D:\OUT все файлы(txt), которые содержат слово на русском языке, например "привет".

код
@Echo on

Set TEXT=привет
Set DIR1=D:\in
Set DIR2=D:\out

:start
For /F "Delims=" %%i In ('FindStr /SMC:"%TEXT%" "%DIR1%\*" /b/s 2^>nul') Do Move "%%i" "%DIR2%" >>output.txt
pause;

goto :start

Пробовала добавлять строки
chcp 1251>nul
chcp 866>nul

все равно не переносит файлы.

При этом если искать латинские буквы или цифры, все работает.
такой поиск с русским словом вообще возможно реализовать?если да, то как?

Отправлено: 16:55, 21-06-2013

 

Ветеран


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

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


Цитата Silfida:
все файлы(txt), которые содержат слово на русском языке, »
Кодировка этих файлов какая?

Отправлено: 17:29, 21-06-2013 | #2



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

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


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


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

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


1251(ANSI-Кирилица)

Отправлено: 17:44, 21-06-2013 | #3


Ветеран


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

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


У findstr из года в год не лады с кириллицей, так что нет ничего удивительного. Предлагаю указывать в батнике кракозябры:
Код: Выделить весь код
@echo off
setlocal

set "search=яЁштхЄ"
for /f "tokens=1 delims=:" %%i in (' findstr "%search%" "d:\in\*.txt" ') do move "%%i" "d:\out"
Батник в 866

Как вариант grep, батник точно такой же, но кодировка 1251
Это сообщение посчитали полезным следующие участники:

Отправлено: 18:28, 21-06-2013 | #4


Ветеран


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

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


Цитата Foreigner:
У findstr из года в год не лады с кириллицей, так что нет ничего удивительного. Предлагаю указывать в батнике кракозябры: »
А я бы и вовсе на PowerShell перешёл:
Код: Выделить весь код
$sSourceFolder = "E:\Песочница\0280\In"
$sDestFolder   = "E:\Песочница\0280\Out"
$sWord         = "привет"

Get-ChildItem -Path $sSourceFolder |`
    ForEach-Object -Process {
        if(!$_.PSIsContainer) {
            if ([string]($_ | Get-Content) -match $sWord) {
                $_ | Move-Item -Destination $sDestFolder
            }
        }
    }
Это сообщение посчитали полезным следующие участники:

Отправлено: 19:29, 21-06-2013 | #5


Ветеран


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

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


Iska, Я бы тоже.
Код: Выделить весь код
gci "d:\in\*.txt" | % {

    if ((gc $_) -contains "привет") { move-item $_ "d:\out" }

}

Последний раз редактировалось Foreigner, 21-06-2013 в 19:57.


Отправлено: 19:50, 21-06-2013 | #6


Ветеран


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

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


Foreigner:
Код: Выделить весь код
(gc $_) -contains "привет"
Цитата:
Код: Выделить весь код
False
False
False
на многострочных файлах (впрочем, на однострочных тоже; это я «-contains» с «-match» спутал).

Последний раз редактировалось Iska, 21-06-2013 в 20:31. Причина: Поправка


Отправлено: 20:29, 21-06-2013 | #7


Ветеран


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

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


Iska, похоже, что -contains работает только при полном совпадении элемента массива (т.е в данном случае строки в файле)
Тогда в зависимости от задачи -- "привет" отдельное слово:
Код: Выделить весь код
if (gc $_ | select-string "\bпривет\b") { $_ }
Это сообщение посчитали полезным следующие участники:

Отправлено: 20:54, 21-06-2013 | #8


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


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

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


Спасибо большое всем!)

Отправлено: 20:59, 21-06-2013 | #9


Ветеран


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

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


Foreigner, я решил по простому — преобразовывал массив в строку: «[string]…». Хотя, конечно, на гигабайтных логах делать такое абсолютно противопоказано.

Отправлено: 20:59, 21-06-2013 | #10



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
[решено] Как уменьшить размер CD при наличии дублирующихся файлов Dorian Grey Автоматическая установка Windows 2000/XP/2003 12 21-01-2012 20:25
CMD/BAT - [решено] Бекап если при наличии файлов Seryoga204 Скриптовые языки администрирования Windows 3 07-10-2010 22:03
Вопрос по домену и переносу ~~~LieT~~~ Microsoft Windows NT/2000/2003 11 23-08-2010 09:06
[решено] StringRegExpReplace - очистить строку при наличии контрольного слова asdf8 AutoIt 7 02-09-2009 16:53
Откат на старые версии Windows при наличии бэкапа файлов и папок kefi Microsoft Windows NT/2000/2003 8 14-02-2008 13:34




 
Переход