Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

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

Ответить
Настройки темы
CMD/BAT - [решено] Перенос из заданных директорий в новую файлы, содержащие заданное слово

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


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

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


Изменения
Автор: Lil Crazy
Дата: 14-05-2010
Как написать .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

Отправлено: 15:07, 12-05-2010

 

Пользователь


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

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


Из справки Windows:
Цитата:
Чтобы переместить все файлы с расширением XLS из каталога \Data в каталог \Second_Q\Reports, введите:

move \data\*.xls \second_q\reports\
т.е. маску можно задавать в самой команде перемещения,
Код: Выделить весь код
move "путь1\*слово*" "путь2\"

Отправлено: 17:43, 12-05-2010 | #2



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

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


Ветеран


Contributor


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

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


Цитата Lil Crazy:
для переноса из заданных директорий в новую файлы, содержащие заданное слово »
- слово в названии файла , или слово в тексте текстового файла (кстати, а кодировка его какая?) Если в названии, то
move "путь1\*слово*.*" "путь2\"

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Отправлено: 18:35, 12-05-2010 | #3


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


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

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


Цитата megaloman:
для переноса из заданных директорий в новую файлы, содержащие заданное слово
- слово в названии файла , или слово в тексте текстового файла (кстати, а кодировка его какая?) Если в названии, то move "путь1\*слово*.*" "путь2\" »
слово в тексте файле, кодировка любая

Отправлено: 19:25, 12-05-2010 | #4


Googler


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

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


Код: Выделить весь код
@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%"
Это сообщение посчитали полезным следующие участники:

Отправлено: 05:04, 13-05-2010 | #5


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


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

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


Цитата 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
И как сделать так чтобы можно было вводить самому кол-во директорий и сами пути директорий, и слово, что надо искать (или хотя бы считывать их с текстового файла)?
И я так понимаю, что сделать отображение перемещаемых файлов (именно названия файлов, то есть какие файлы перемещены) довольно проблематично?

Отправлено: 14:39, 13-05-2010 | #6


Googler


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

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


Цитата 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"

Отправлено: 17:41, 13-05-2010 | #7


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


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

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


Код: Выделить весь код
@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
этот скрипт получается работает только с английскими словами? с русскими ничего не находит

Отправлено: 20:00, 13-05-2010 | #8


Googler


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

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


Цитата 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"
Это сообщение посчитали полезным следующие участники:

Отправлено: 06:09, 14-05-2010 | #9


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


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

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


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, 14-05-2010 в 15:39.


Отправлено: 13:44, 14-05-2010 | #10



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Вывод заданных параметров storm2005 Скриптовые языки администрирования Windows 1 08-01-2010 10:34
[решено] Перенос установленных программ со старой системы на новую... CnyH9I Хочу все знать 5 28-12-2009 17:02
Все знают про обьеденение строк ('слово'&'еще слово'), а есть ли способ исключениеня? tweakos AutoIt 3 15-07-2009 09:52
Прочие - Программа (скрипт) удаление из заданного каталога заданных файлов __sa__nya Программное обеспечение Windows 1 20-11-2008 19:02
Перенос контроллера домена со старой системы на новую Ment69 Microsoft Windows NT/2000/2003 1 01-09-2006 06:56




 
Переход