Показать полную графическую версию : [решено] Поиск файлов в поддиректориях по списку из txt и перемещение
Sub-Zero
10-08-2014, 03:48
Приветствую!
Помогите решить задачу. Есть заранее составленный список в текстовом файле вида:
file_1fskldv1.xls
file_vdkyt.doc
file_fsdf.com и так далее.
Нужно пройтись по этому списку и найти в текущей папке, откуда выполняется скрипт, и всех подпапках файлы из списка и переместить их в заданную папку.
Те файлы которые в процессе работы не были найдены - занести в отдельный текстовый файл.
Спасибо!
в текущей папке, откуда выполняется скрипт »
В текущем каталоге или в каталоге, где расположен пакетный файл?
и переместить их в заданную папку. »
Если будет найдено несколько файлов с одним и тем же именем — что делать?
@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
В текущем каталоге или в каталоге, где расположен пакетный файл? »
В каталоге где находится сам пакетник.
Если будет найдено несколько файлов с одним и тем же именем — что делать? »
Просто перезаписывать... если переименовывать это усложнит задачу.
Код: »
Супер!!! Спасибо огромное! :yahoo: Я в принципе понял что нужно использовать 2 цикла - одни для разбора подпапок и второй для разбора файла с именами фалов, но вот реализовать не удалось...:)
a_Wizard
09-03-2017, 17:13
Ради теста, я вписал скрипт в текстовый файл, дав ему расширение 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
Ради теста, я вписал скрипт в текстовый файл, дав ему расширение bat (operator.bat).
То есть, поиск должeн вестись в С:\ »
С чего бы это в С:\?! Прочтите выше, где задавались вопросы и давались ответы на предмет того, где должен осуществляться поиск.
a_Wizard
11-03-2017, 10:35
С чего бы это в С:\?! Прочтите выше, где задавались вопросы и давались ответы на предмет того, где должен осуществляться поиск. »
Ну вообщем, у меня получилось, когда я расположил батник (operator.bat) и текстовый файл (list.txt) в одну папку, а результаты поиска были перемещены в D:\Заданная папка. Пока возникают только 2 вопроса. Поиск ведется только в папке, где находятся 2 ключевых файла или в ее подпапках (на 1-2 уровня глубже) тоже? И потом, хотелось бы не перемещать, а копировать. А почему так медленно выполняется операция? Вроде я для проверки положил 5 крошечных по размеру файла, но они переместились в D лишь через полминуты.
Поиск ведется только в папке, где находятся 2 ключевых файла или в ее подпапках (на 1-2 уровня глубже) тоже? »
Почитайте, за что отвечает параметр /s команды dir:
dir /?
И потом, хотелось бы не перемещать, а копировать. »
copy /?
А почему так медленно выполняется операция? Вроде я для проверки положил 5 крошечных по размеру файла, но они переместились в D лишь через полминуты. »
Большое и разветвлённое дерево каталогов для поиска, размер которого тупо не умещается в кэш?
a_Wizard
18-03-2017, 10:52
Iska, благодарю. Только хотел спросить. Если я хочу вести поиск на съемном диске E:\, какое значение в батнике надо поменять?
Только хотел спросить. Если я хочу вести поиск на съемном диске E:\, какое значение в батнике надо поменять? »
Никакое. Откройте командную строку, сделайте текущим корневой каталог диска «e:»:
cd /d e:\
затем оттуда запускайте пакетный файл, указав полный путь к нему (чтобы не набирать вручную полный путь — можно тупо перетянуть его в окно командной строки из Проводника).
a_Wizard
22-03-2017, 14:29
Никакое. Откройте командную строку, сделайте текущим корневой каталог диска «e:»:
Код: Выделить весь код
cd /d e:\
затем оттуда запускайте пакетный файл, указав полный путь к нему (чтобы не набирать вручную полный путь — можно тупо перетянуть его в окно командной строки из Проводника). »
Вы имеете ввиду Пуск - Выполнить - Командная строка - cd /d e:\ ? Так можно и запутаться (боюсь, сотрется все в С). Я сделал, но ничего не получилось. Может как-то в батнике указать съемный диск Е?
И потом даже в том виде что есть (текстовые оперирующие файлы и файлы для перемещения) этот скрипт не всегда работает - спотыкается при каждом втором запуске. Почему так?
Вы имеете ввиду Пуск - Выполнить - Командная строка - cd /d e:\ ? »
Да.
Так можно и запутаться (боюсь, сотрется все в С) »
Начинайте осваивать Far Manager. Там не запутаетесь. И большинство пакетных файлов-однодневок попросту станут не нужны.
a_Wizard
22-03-2017, 15:58
Iska, но почему Пуск - Выполнить - Командная строка - cd /d e:\ и О.К, при том же оперирующем файле ничегo не выполняет? Чтобы мне было яснее, выложите плиз скриншот вашего черного окна Администратор - Командная строка. Кстати, О.К. надо нажимать сразу после вставки cd /d e:\ или потом?
a_Wizard
27-03-2017, 07:26
Что-то не нравится мне предложенный выше скрипт.
@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, но почему Пуск - Выполнить - Командная строка - cd /d e:\ и О.К, при том же оперирующем файле ничегo не выполняет? »
Недостаточно исходной информации для осмысленного ответа.
Кстати, О.К. надо нажимать сразу после вставки cd /d e:\ или потом? »
В окне командной строки нет кнопки ОК.
Что-то не нравится мне предложенный выше скрипт. »
Мне тоже. Я категорически не люблю chcp 1251.
И потом, непонятно, в какой конкретно папке должны находится оперирующие файлы, »
Что такое «оперирующие файлы»?
a_Wizard
27-03-2017, 12:58
И потом, непонятно, в какой конкретно папке должны находится оперирующие файлы, »
Имеются ввиду list(.txt), not_found(.txt) и батник. Если файлы разбросаны по всему компу, то как вести поиск? И вообще, в том виде, что дан скрипт выше, он не работает, можно сказать. Только малюсенькие файлы и то через раз-два перемещает. А большие ни разу не переместил.
В Total Commander есть команда Поиск файлов по списку. Однако это срабатывает если файлы лежат в локальных дисках компа. Со съемным диском ничего не получается. ТС хоть видит его, но не оперирует с ним.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.