Показать полную графическую версию : [решено] Batник по переносу файлов при наличии русского слова
Добрый день, подскажите пожалуйста.
Мне нужно создать батник, который из папки 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
все равно не переносит файлы.
При этом если искать латинские буквы или цифры, все работает.
такой поиск с русским словом вообще возможно реализовать?если да, то как?
все файлы(txt), которые содержат слово на русском языке, »
Кодировка этих файлов какая?
Foreigner
21-06-2013, 18:28
У 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 (http://gnuwin32.sourceforge.net/packages/grep.htm), батник точно такой же, но кодировка 1251
У 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
}
}
}
Foreigner
21-06-2013, 19:50
Iska, Я бы тоже.
gci "d:\in\*.txt" | % {
if ((gc $_) -contains "привет") { move-item $_ "d:\out" }
}
Foreigner:
(gc $_) -contains "привет"
False
False
False
на многострочных файлах (впрочем, на однострочных тоже; это я «-contains» с «-match» спутал).
Foreigner
21-06-2013, 20:54
Iska, похоже, что -contains работает только при полном совпадении элемента массива (т.е в данном случае строки в файле)
Тогда в зависимости от задачи -- "привет" отдельное слово:
if (gc $_ | select-string "\bпривет\b") { $_ }
Foreigner, я решил по простому — преобразовывал массив в строку: «[string]…». Хотя, конечно, на гигабайтных логах делать такое абсолютно противопоказано.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC