Перенос из заданных директорий в новую файлы, содержащие заданное слово
Как написать .bat/.cmd файл для переноса из заданных директорий в новую файлы, содержащие заданное слово?
Кое-как начал разбираться - получилось что-то следующее (до это не имел со скриптами дел):
Код:
setlocal enableextensions
setlocal enabledelayedexpansion
for /f %%a in ('dir "путь\*паттернкакойнить*" /A:-D /B ') do (
move \Y "путь\"%%a "путь2\"%%a )
В инете нашёл скрипт как он бы выглядел в юниксах:
Код:
cd /zadanniy/katalog
for i in `grep -R SLOVO *`
do
mv "$i" /noviy/katalog
done
|
Из справки Windows:
Цитата:
Чтобы переместить все файлы с расширением XLS из каталога \Data в каталог \Second_Q\Reports, введите:
move \data\*.xls \second_q\reports\
|
т.е. маску можно задавать в самой команде перемещения,
Код:
move "путь1\*слово*" "путь2\"
|
Цитата:
Цитата Lil Crazy
для переноса из заданных директорий в новую файлы, содержащие заданное слово »
|
- слово в названии файла , или слово в тексте текстового файла (кстати, а кодировка его какая?) Если в названии, то
move "путь1\*слово*.*" "путь2\"
|
Цитата:
Цитата megaloman
для переноса из заданных директорий в новую файлы, содержащие заданное слово
- слово в названии файла , или слово в тексте текстового файла (кстати, а кодировка его какая?) Если в названии, то move "путь1\*слово*.*" "путь2\" »
|
слово в тексте файле, кодировка любая
|
Код:
@Echo Off
Set TEXT=SLOVO
Set DIR1=C:\TEST1
Set DIR2=C:\TEST2
For /F "Delims=" %%i In ('FindStr /SMC:"%TEXT%" "%DIR1%\*"') Do Move "%%i" "%DIR2%"
|
Цитата:
Цитата amel27
Код:
@Echo Off
Set TEXT=SLOVO
Set DIR1=C:\TEST1
Set DIR2=C:\TEST2
For /F "Delims=" %%i In ('FindStr /SMC:"%TEXT%" "%DIR1%\*"') Do Move "%%i" "%DIR2%" »
|
А для того чтобы в нескольких директориях искать файлы надо соответственно задать ещё несколько директорий и в добавить в код?
Код:
For /F "Delims=" %%i In ('FindStr /SMC:"%TEXT%" "%DIR1%\*" "%ещё n-количество директорий%\*"') Do Move "%%i" "%DIR2%"
Но так у меня ничего не вышло - ищет и перемещает только в первой директории:
Код:
@Echo Off
Set TEXT=SLOVO
Set DIR1=C:\TEST1
Set DIR2=C:\TEST2
Set DIR3=C:\TEST3
For /F "Delims=" %%i In ('FindStr /SMC:"%TEXT%" "%DIR1%\*" "%DIR2%\*"') Do Move "%%i" "%DIR3%"
@pause
И как сделать так чтобы можно было вводить самому кол-во директорий и сами пути директорий, и слово, что надо искать (или хотя бы считывать их с текстового файла)?
И я так понимаю, что сделать отображение перемещаемых файлов (именно названия файлов, то есть какие файлы перемещены) довольно проблематично?
|
Цитата:
Цитата Lil Crazy
For /F "Delims=" %%i In ('FindStr /SMC:"%TEXT%" "%DIR1%\*" "%DIR2%\*"') Do Move "%%i" "%DIR3%" »
|
тогда уж так:
Код:
@Echo Off
Set TEXT=SLOVO
Set DIR1=C:\TEST1
Set DIR2=C:\TEST2
Set DIR3=C:\TEST3
For /F "Delims=" %%i In ('FindStr /SMC:"%TEXT%" "%DIR1%\*"^&FindStr /SMC:"%TEXT%" "%DIR2%\*"') Do Move "%%i" "%DIR3%"
@pause
Цитата:
Цитата Lil Crazy
как сделать так чтобы можно было вводить самому кол-во директорий и сами пути директорий, и слово »
|
Код:
@Echo Off
:TXT
Set /P $TXT="Что ищем: "
If "%$TXT%"=="" GoTo TXT
:NUM
Set /P $NUM="Количество папок: "
Set $IDX=1& Set /A $NUM+=0
If %$NUM% EQU 0 GoTo NUM
:DIR
Set /P $_%$IDX%="Путь к папке %$IDX%: "
Call Set $T=%%$_%$IDX%%%
If Exist %$T% Set /A $IDX+=1
If %$IDX% LEQ %$NUM% GoTo DIR
Set $MOVE=C:\TEST& Echo.
For /F "Tokens=1* Delims==" %%a In ('Set $_') Do For /F "Delims=" %%i In (
'FindStr /SMC:"%$TXT%" "%%b\*"') Do Move "%%i" "%$MOVE%"& Echo "%%i"
|
Код:
@Echo Off
:TXT
Set /P $TXT="Input word for search: "
If "%$TXT%"=="" GoTo TXT
:NUM
Set /P $NUM="Number of dirs: "
Set $IDX=1& Set /A $NUM+=0
If %$NUM% EQU 0 GoTo NUM
:DIR
Set /P $_%$IDX%="Path to folder %$IDX% for search: "
Call Set $T=%%$_%$IDX%%%
If Exist %$T% Set /A $IDX+=1
If %$IDX% LEQ %$NUM% GoTo DIR
:MOVE
Set /P $MOVE="Input destinantion dir: "
If "%$MOVE%"=="" GoTo MOVE
For /F "Tokens=1* Delims==" %%a In ('Set $_') Do For /F "Delims=" %%i In (
'FindStr /SMC:"%$TXT%" "%%b\*"') Do Move "%%i" "%$MOVE%"& Echo "%%i"
@pause
этот скрипт получается работает только с английскими словами? с русскими ничего не находит
|
Цитата:
Цитата Lil Crazy
получается работает только с английскими словами? с русскими ничего не находит »
|
текст вводится в OEM (DOS/866) кодировке... соответственно, и ищется в ней,
вариант через временный файл для поиска в 3-х кодировках (DOS/WIN/UTF8):
Код:
@Echo Off
:TXT
Set /P $TXT="Input word for search: "
If "%$TXT%"=="" GoTo TXT
Echo %$TXT%>"%~dpn0.tmp"
CHCP 1251 |>>"%~dpn0.tmp" Echo %$TXT%&CHCP 866 >Nul
CHCP 65001|>>"%~dpn0.tmp" Echo %$TXT%&CHCP 866 >Nul
:NUM
Set /P $NUM="Number of dirs: "
Set $IDX=1& Set /A $NUM+=0
If %$NUM% EQU 0 GoTo NUM
:DIR
Set /P $_%$IDX%="Path to folder %$IDX% for search: "
Call Set $T=%%$_%$IDX%%%
If Exist %$T% Set /A $IDX+=1
If %$IDX% LEQ %$NUM% GoTo DIR
:MOVE
Set /P $MOVE="Input destinantion dir: "
If "%$MOVE%"=="" GoTo MOVE
For /F "Tokens=1* Delims==" %%a In ('Set $_') Do For /F "Delims=" %%i In (
'FindStr /SMG:"%~dpn0.tmp" "%%b\*"') Do Move "%%i" "%$MOVE%" >Nul& Echo "%%i"
|
amel27, спасибо вам огромное! Ещё один вопрос хотел задать только: как сделать чтобы бы в консоли выводились перемещаемые файлы и сохранить их в создаваемый автоматически текстовый файл как лог-файл, то есть:
Цитата:
C:\StartFolder\fle1.txt ------> C:\DestinationFolder\file1.txt
|
Код:
@Echo Off
:TXT
Set /P $TXT="Input word for search: "
If "%$TXT%"=="" GoTo TXT
Echo %$TXT%>"%~dpn0.tmp"
CHCP 1251 |>>"%~dpn0.tmp" Echo %$TXT%&CHCP 866 >Nul
CHCP 65001|>>"%~dpn0.tmp" Echo %$TXT%&CHCP 866 >Nul
:NUM
Set /P $NUM="Number of folders: "
Set $IDX=1& Set /A $NUM+=0
If %$NUM% EQU 0 GoTo NUM
:DIR
Set /P $_%$IDX%="Path to folder %$IDX% for search: "
Call Set $T=%%$_%$IDX%%%
If Exist %$T% Set /A $IDX+=1
If %$IDX% LEQ %$NUM% GoTo DIR
:MOVE
Set /P $MOVE="Input destinantion folder: "
If "%$MOVE%"=="" GoTo MOVE
If not Exist "%$MOVE%" MkDir "%$MOVE%"
For /F "Tokens=1* Delims==" %%a In ('Set $_') Do For /F "Delims=" %%i In (
'FindStr /SMG:"%~dpn0.tmp" "%%b\*"') Do Move "%%i" "%$MOVE%" >Nul& Echo "%%i"
Del "%~dpn0.tmp"
@pause
а то в этом скрипте выводятся просто файлы из начальной директории списком, без конечной папки
|
Цитата:
Цитата Lil Crazy
C:\StartFolder\fle1.txt ------> C:\DestinationFolder\file1.txt »
|
Код:
Echo Off
:TXT
Set /P $TXT="Input word for search: "
If "%$TXT%"=="" GoTo TXT
>"%~dpn0.tmp" Echo %$TXT%
CHCP 1251 |>>"%~dpn0.tmp" Echo %$TXT%&CHCP 866 >Nul
CHCP 65001|>>"%~dpn0.tmp" Echo %$TXT%&CHCP 866 >Nul
:NUM
Set /P $NUM="Number of folders: "
Set $IDX=1& Set /A $NUM+=0
If %$NUM% EQU 0 GoTo NUM
:DIR
Set /P $_%$IDX%="Path to folder %$IDX% for search: "
Call Set $T=%%$_%$IDX%%%
If Exist %$T% Set /A $IDX+=1
If %$IDX% LEQ %$NUM% GoTo DIR
:MOVE
Set /P $MOVE="Input destinantion folder: "
If "%$MOVE%"=="" GoTo MOVE
If Not Exist "%$MOVE%" MkDir "%$MOVE%"
For /F "Tokens=1* Delims==" %%a In ('Set $_') Do For /F "Delims=" %%i In (
'FindStr /SMG:"%~dpn0.tmp" "%%b\*"') Do Move "%%i" "%$MOVE%" >Nul& Echo %%i ---^> %$MOVE%\%%~nxi
Del "%~dpn0.tmp"
@pause
|
amel27, спасибо за помощь!
|
Время: 15:19.
© OSzone.net 2001-