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

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Поиск с помощью Bat ника (http://forum.oszone.net/showthread.php?t=268936)

shiroq 28-09-2013 12:48 2225236

Поиск с помощью Bat ника
 
Диски есть файлы, с помощью батника надо искать определенной слова в файлах и все файлы содержащий этот слова скопировать на другой каталог!

Благодарю оказавших помощь!

sunnykey 28-09-2013 15:04 2225290

Код:

#Powershell script.
#Don't forget unlock script executing by
#using command "Set-ExecutionPolicy RemoteSigned" or "Set-ExecutionPolicy Unrestricted"
$SourceDir="C:\From\"
$DestDir="C:\To"
#выбрать нужную кодировку файла между ASCII, UTF8, UTF7, UTF32, Unicode, OEM
$Encoding=[Microsoft.PowerShell.Commands.FileSystemCmdletProviderEncoding]::UTF8
gci "$SourceDir\*" -Recurse -Force | % {
    if ((gc $_.FullName -Encoding $Encoding | Select-String -pattern "Какая-то строка") -ne $null) {
        Copy-Item -Path $_.FullName -Destination $DestDir -Recurse -Force
    }
}


muqanna 30-09-2013 08:42 2225982

Спасибо за поддержку но мне надо bat ник!
Я организовал поиск проблема с копированием файла...

Foreigner 30-09-2013 09:31 2225989

muqanna,
Код:

@echo off
setlocal

set "from=C:\Some Folder"
set "to=D:\Some Folder"
set "words=\<qwerty\> \<monday\> \<tomorrow\>"

2>nul md "%to%"

for /f "tokens=1 delims=:" %%i in (' findstr /s "%words%" "%from%\*" ') do call:copy "%%i"

goto:eof

:copy
set "file=%~nx1"
set "cnt=0"

:check
set /a cnt+=1
if not exist "%to%\%file%" (

    copy %1 "%to%\%file%"

) else (

    set "file=%~n1(%cnt%)%~x1"
    goto:check

)

Ищет в папке "C:\Some Folder" и в подпапках
Слова "qwerty", "monday" и "tomorrow"
Копирует с проверкой на имя в "D:\Some Folder"

muqanna 30-09-2013 09:44 2225994

Foreigner, Спасибо щя проверим!

muqanna 30-09-2013 10:13 2225999

Foreigner, Не! пишет что не удалось найти указанного файла... Я смотрел кода
Цитата:

Цитата Foreigner
"%from%\*" »

ошибка не в этом строке?

Foreigner 30-09-2013 12:03 2226062

muqanna:
Цитата:

ошибка не в этом строке?
Нет, это ошибка findstr.exe
Выдает пути в 866, в случае если названия файлов или путь к ним содержат кириллицу. Предлагаю вариант с использованием grep:
Код:

@echo off
setlocal
1>nul chcp 1251

set "from=C:\Some Folder"
set "to=D:\Some Folder"
set "words=(Hello|Привет|Goodbye)"

2>nul md "%to%"

for /f "tokens=1 delims=:" %%i in (' grep -RE "%words%" "%from%\*" ') do set "f_%%~si=%%i"
for /f "tokens=2 delims==" %%i in (' set f_ ') do call:copy "%%i"
goto:eof

:copy
set "fullname=%~1"
set "file=%~nx1"
set "cnt=0"
                                                                         
:check
set /a cnt+=1
if not exist "%to%\%file%" (

    copy "%fullname:/=\%" "%to%\%file%"

) else (

    set "file=%~n1(%cnt%)%~x1"
    goto:check

)


muqanna 30-09-2013 17:07 2226264

Цитата:

Цитата Foreigner
Foreigner »

Дал вот такую сообщения!
C:\Temp\1>1
grep: C:\Temp\1\1\*: No such file or directory
Переменная среды f_ не определена

Я с grepам не работал? Дальше что делать?

Foreigner 30-09-2013 18:10 2226296

Исправил, попробуйте:
Код:

@echo off
setlocal
1>nul chcp 1251

set "from=C:\Some Folder"
set "to=D:\Some Folder"
set "words=(Hello|Привет|Goodbye)"

2>nul md "%to%"

for /f "tokens=2 delims=:" %%i in (' grep -RE "%words%" "%from%\*" ') do call:set "%%i"
for /f "tokens=2 delims==" %%i in (' set f_ ') do call:copy "%%i"
goto:eof

:copy
set "fullname=%~1"
set "file=%~nx1"
set "cnt=0"
                                                                         
:check
set /a cnt+=1
if not exist "%to%\%file%" (

    copy "%fullname:/=\%" "%to%\%file%"

) else (

    set "file=%~n1(%cnt%)%~x1"
    goto:check

)
goto:eof

:set
set "s=%~1"
set "s=%s: =_%"
set "f_%s%=%~1"


muqanna 02-10-2013 07:31 2227201

Цитата:

Цитата Foreigner
Foreigner »

Цитата:

Цитата muqanna
grep: C:\Temp\1\1\*: No such file or directory
Переменная среды f_ не определена »

тот же сообщению выдает!

muqanna 04-10-2013 07:41 2228321

Цитата:

Цитата Foreigner
Я с grepам не работал? Дальше что делать?»


muqanna 10-10-2013 07:47 2231774

Цитата:

Цитата muqanna
Цитата Foreigner: »

Я изменил код, он работает, но тут два проблемы,
Это:
1) Сетевого диска не правильно видеть! На компе D:\test без проблем работает, указываю сетевой диск, он его принимает без буквы на пример x:\test, а он принимает его как \test!
2) Цикл выполняется не полностью, допустим там 5 файла, а он находит в 4-х и копирует 4 файла!(из 600 файлов он пропустил 7 файлов!)
--------------------------

@echo on
setlocal

set "from=d:\Temp\1"
set "to=d:\Temp\2"
set "words=test"

2>nul md "%to%"

for /f "tokens=2* delims=:" %%i in (' findstr /s %words% %from%\*.* ') do call:copy "%%i"

goto:eof

:copy
set "file=%~nx1"
set "cnt=0"

:check
set /a cnt+=1
if not exist "%to%\%file%" (

copy %1 "%to%\%file%"

) else (

set "file=%~n1(%cnt%)%~x1"
goto:check

)


Время: 23:32.

Время: 23:32.
© OSzone.net 2001-