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

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

Sub-Zero 10-08-2014 03:48 2387219

Поиск файлов в поддиректориях по списку из txt и перемещение
 
Приветствую!
Помогите решить задачу. Есть заранее составленный список в текстовом файле вида:
file_1fskldv1.xls
file_vdkyt.doc
file_fsdf.com и так далее.
Нужно пройтись по этому списку и найти в текущей папке, откуда выполняется скрипт, и всех подпапках файлы из списка и переместить их в заданную папку.
Те файлы которые в процессе работы не были найдены - занести в отдельный текстовый файл.
Спасибо!

Iska 10-08-2014 05:18 2387222

Цитата:

Цитата Sub-Zero
в текущей папке, откуда выполняется скрипт »

В текущем каталоге или в каталоге, где расположен пакетный файл?

Цитата:

Цитата Sub-Zero
и переместить их в заданную папку. »

Если будет найдено несколько файлов с одним и тем же именем — что делать?

Georgio 10-08-2014 05:37 2387223

Код:

@echo off
chcp 1251>nul

set "list=list.txt"
set "folder=D:\Заданная папка"
set "not_found=not_found.txt"

2>nul md "%folder%"
>"%not_found%" (
for /f "usebackq delims=" %%i in ("%list%") do (
 for /f "delims=" %%j in ('
 "2>nul dir /a-d/b/s "%%i""
 ') do (
  >nul move "%%j" "%folder%"
  )
 )|| (
 echo %%i
 )
)

exit /b


Sub-Zero 10-08-2014 11:15 2387267

Цитата:

Цитата Iska
В текущем каталоге или в каталоге, где расположен пакетный файл? »

В каталоге где находится сам пакетник.
Цитата:

Цитата Iska
Если будет найдено несколько файлов с одним и тем же именем — что делать? »

Просто перезаписывать... если переименовывать это усложнит задачу.
Цитата:

Цитата Georgio
Код: »

Супер!!! Спасибо огромное! :yahoo: Я в принципе понял что нужно использовать 2 цикла - одни для разбора подпапок и второй для разбора файла с именами фалов, но вот реализовать не удалось...:)

a_Wizard 09-03-2017 17:13 2717929

Ради теста, я вписал скрипт в текстовый файл, дав ему расширение bat (operator.bat).
То есть, поиск должeн вестись в С:\ а результаты складываться в папку Заданная папка.
К сожалению, файлы не были найдены. Почему так?

Скрытый текст
@echo off
chcp 1251>nul

set "list=list.txt"
set "folder=С:\Заданная папка"
set "not_found=not_found.txt"

2>nul md "%folder%"
>"%not_found%" (
for /f "usebackq delims=" %%i in ("%list%") do (
for /f "delims=" %%j in ('
"2>nul dir /a-d/b/s "%%i""
') do (
>nul move "%%j" "%folder%"
)
)|| (
echo %%i
)
)

exit /b

Iska 09-03-2017 17:23 2717934

Цитата:

Цитата a_Wizard
Ради теста, я вписал скрипт в текстовый файл, дав ему расширение bat (operator.bat).
То есть, поиск должeн вестись в С:\ »

С чего бы это в С:\?! Прочтите выше, где задавались вопросы и давались ответы на предмет того, где должен осуществляться поиск.

a_Wizard 11-03-2017 10:35 2718377

Цитата:

Цитата Iska
С чего бы это в С:\?! Прочтите выше, где задавались вопросы и давались ответы на предмет того, где должен осуществляться поиск. »

Ну вообщем, у меня получилось, когда я расположил батник (operator.bat) и текстовый файл (list.txt) в одну папку, а результаты поиска были перемещены в D:\Заданная папка. Пока возникают только 2 вопроса. Поиск ведется только в папке, где находятся 2 ключевых файла или в ее подпапках (на 1-2 уровня глубже) тоже? И потом, хотелось бы не перемещать, а копировать. А почему так медленно выполняется операция? Вроде я для проверки положил 5 крошечных по размеру файла, но они переместились в D лишь через полминуты.

Iska 11-03-2017 11:43 2718397

Цитата:

Цитата a_Wizard
Поиск ведется только в папке, где находятся 2 ключевых файла или в ее подпапках (на 1-2 уровня глубже) тоже? »

Почитайте, за что отвечает параметр /s команды dir:
Код:

dir /?
Цитата:

Цитата a_Wizard
И потом, хотелось бы не перемещать, а копировать. »

Код:

copy /?
Цитата:

Цитата a_Wizard
А почему так медленно выполняется операция? Вроде я для проверки положил 5 крошечных по размеру файла, но они переместились в D лишь через полминуты. »

Большое и разветвлённое дерево каталогов для поиска, размер которого тупо не умещается в кэш?

a_Wizard 18-03-2017 10:52 2720634

Iska, благодарю. Только хотел спросить. Если я хочу вести поиск на съемном диске E:\, какое значение в батнике надо поменять?

Iska 19-03-2017 05:39 2720898

Цитата:

Цитата a_Wizard
Только хотел спросить. Если я хочу вести поиск на съемном диске E:\, какое значение в батнике надо поменять? »

Никакое. Откройте командную строку, сделайте текущим корневой каталог диска «e:»:
Код:

cd /d e:\
затем оттуда запускайте пакетный файл, указав полный путь к нему (чтобы не набирать вручную полный путь — можно тупо перетянуть его в окно командной строки из Проводника).

a_Wizard 22-03-2017 14:29 2722056

Цитата:

Цитата Iska
Никакое. Откройте командную строку, сделайте текущим корневой каталог диска «e:»:
Код: Выделить весь код
cd /d e:\
затем оттуда запускайте пакетный файл, указав полный путь к нему (чтобы не набирать вручную полный путь — можно тупо перетянуть его в окно командной строки из Проводника). »

Вы имеете ввиду Пуск - Выполнить - Командная строка - cd /d e:\ ? Так можно и запутаться (боюсь, сотрется все в С). Я сделал, но ничего не получилось. Может как-то в батнике указать съемный диск Е?

И потом даже в том виде что есть (текстовые оперирующие файлы и файлы для перемещения) этот скрипт не всегда работает - спотыкается при каждом втором запуске. Почему так?

Iska 22-03-2017 15:52 2722093

Цитата:

Цитата a_Wizard
Вы имеете ввиду Пуск - Выполнить - Командная строка - cd /d e:\ ? »

Да.

Цитата:

Цитата a_Wizard
Так можно и запутаться (боюсь, сотрется все в С) »

Начинайте осваивать Far Manager. Там не запутаетесь. И большинство пакетных файлов-однодневок попросту станут не нужны.

a_Wizard 22-03-2017 15:58 2722100

Iska, но почему Пуск - Выполнить - Командная строка - cd /d e:\ и О.К, при том же оперирующем файле ничегo не выполняет? Чтобы мне было яснее, выложите плиз скриншот вашего черного окна Администратор - Командная строка. Кстати, О.К. надо нажимать сразу после вставки cd /d e:\ или потом?

a_Wizard 27-03-2017 07:26 2723294

Что-то не нравится мне предложенный выше скрипт.
Скрытый текст
@echo off
chcp 1251>nul

set "list=list.txt"
set "folder=С:\Заданная папка"
set "not_found=not_found.txt"

2>nul md "%folder%"
>"%not_found%" (
for /f "usebackq delims=" %%i in ("%list%") do (
for /f "delims=" %%j in ('
"2>nul dir /a-d/b/s "%%i""
') do (
>nul move "%%j" "%folder%"
)
)|| (
echo %%i
)
)

exit /b

Он работает через раз и очень медленно. Даже малюсенькие (в несколько килобайт) файлы перемещает через полминуты. И потом, непонятно, в какой конкретно папке должны находится оперирующие файлы, именно в той откуда хочу переместить искомые, которые не должны находится в подпапках, или операция возможна только с конкретного локального диска?

Iska 27-03-2017 09:39 2723315

Цитата:

Цитата a_Wizard
Iska, но почему Пуск - Выполнить - Командная строка - cd /d e:\ и О.К, при том же оперирующем файле ничегo не выполняет? »

Недостаточно исходной информации для осмысленного ответа.

Цитата:

Цитата a_Wizard
Кстати, О.К. надо нажимать сразу после вставки cd /d e:\ или потом? »

В окне командной строки нет кнопки ОК.

Цитата:

Цитата a_Wizard
Что-то не нравится мне предложенный выше скрипт. »

Мне тоже. Я категорически не люблю chcp 1251.


Цитата:

Цитата a_Wizard
И потом, непонятно, в какой конкретно папке должны находится оперирующие файлы, »

Что такое «оперирующие файлы»?

a_Wizard 27-03-2017 12:58 2723410

Цитата:

Цитата Iska
И потом, непонятно, в какой конкретно папке должны находится оперирующие файлы, »

Имеются ввиду list(.txt), not_found(.txt) и батник. Если файлы разбросаны по всему компу, то как вести поиск? И вообще, в том виде, что дан скрипт выше, он не работает, можно сказать. Только малюсенькие файлы и то через раз-два перемещает. А большие ни разу не переместил.
В Total Commander есть команда Поиск файлов по списку. Однако это срабатывает если файлы лежат в локальных дисках компа. Со съемным диском ничего не получается. ТС хоть видит его, но не оперирует с ним.


Время: 06:13.

Время: 06:13.
© OSzone.net 2001-