Поиск кучи файлов
Nov. 12th, 2010 11:30 am![[identity profile]](https://www.dreamwidth.org/img/silk/identity/openid.png)
![[community profile]](https://www.dreamwidth.org/img/silk/identity/community.png)
есть список файлов которые необходимо найти на компьютере, их около 10 000
Есть ли какая нибудь программка которой можно было бы скормить этот список, а она в ответ бы выдала файлики которые нашлись?
Спасибо.
Есть ли какая нибудь программка которой можно было бы скормить этот список, а она в ответ бы выдала файлики которые нашлись?
Спасибо.
no subject
Date: 2010-11-12 09:36 am (UTC)for /f %%i in (c:\input.txt) do (
echo %%i
find /i "%%i" >>result.txt
)
no subject
Date: 2010-11-12 09:46 am (UTC)no subject
Date: 2010-11-12 09:47 am (UTC)no subject
Date: 2010-11-12 01:25 pm (UTC)for /f %%a in (c:\!\file.name) do copy C:\test_photo\%%a c:\!\new\
но результата не приносит..
имена файло в списке должны быть 100% идентичные, или если они без расширения тоже нормально будет?
no subject
Date: 2010-11-12 01:34 pm (UTC)надо бы задачу ставить поточнее
no subject
Date: 2010-11-12 01:43 pm (UTC)no subject
Date: 2010-11-12 01:47 pm (UTC)а мой подход внизу не понравился? если все файлы в одной папке, то можно и проще:
for /f "delims=" %%i in (input.txt) do copy "c:\from_dir\%%i" "c:\target_dir_to_copy"
в конце можно добавить >nul 2>nul
no subject
Date: 2010-11-12 01:49 pm (UTC)for /f "delims=" %%i in (input.txt) do copy "c:\from_dir\%%i.jpg" "c:\target_dir_to_copy"
и целевая папка должна существовать
no subject
Date: 2010-11-12 01:56 pm (UTC)а вот это вроде заработало - спасибо огромное!!!!
no subject
Date: 2010-11-12 01:58 pm (UTC)no subject
Date: 2010-11-12 02:08 pm (UTC)естественно, со всеми шагами (копирование, поиск)
no subject
Date: 2010-11-12 01:00 pm (UTC)no subject
Date: 2010-11-12 01:20 pm (UTC)no subject
Date: 2010-11-12 12:52 pm (UTC)find /i не найдет файл, нужно бы сперва до цикла dir /b /s > files.txt сделать, а потом уже в нем с помощью find искать
no subject
Date: 2010-11-12 11:52 am (UTC)Есть также язык Perl - тоже очень хорошее решение. Или VisualBasic - хуже, но тоже можно использовать.
PS: И Unix-утилиты, и Perl есть под Windows. А VisualBasic там родной.
no subject
Date: 2010-11-12 12:59 pm (UTC)no subject
Date: 2010-11-12 01:36 pm (UTC)no subject
Date: 2010-11-12 01:38 pm (UTC)no subject
Date: 2010-11-12 01:56 pm (UTC)rm `find / -name '*,tmp'`
или
find / -name '*,tmp' -rm # этот вариант надо проверить, всё ли я сделал правильно
no subject
Date: 2010-11-12 02:05 pm (UTC)del /s /q /f *.tmp
/s - рекурсивно
/q - удалять не спрашивая
/f - удалять защищенные от записи
можно в одну строку:
cd c:\ & del /s /q /f *.tmp
no subject
Date: 2010-11-13 08:40 pm (UTC)А удалить файлы *.TMP, но не все, а только старше указанной даты?
no subject
Date: 2010-11-14 09:19 am (UTC)for /f "delims=" %%i in ('dir /b /s /o:-d *.tmp') do copy "%%i" d:\target_dir
вариант с удалением старых файлов несколько сложнее, т.к. имхо нет встроенного сравнения дат, но тоже не невозможен, мое решение в виде бат-файла:
из-за того, что на моем компе европейская система записи дат ДД.ММ.ГГГГ, чтобы иметь возможность сравнивать даты я перевел их в американский стандарт ГГГГ-ММ-ДД... не так элегантно, конечно, но скажем так - не смертельно, если знать как
no subject
Date: 2010-11-14 04:34 pm (UTC)Ещё изменю задачу: надо эти файлы запихнуть в архив.
А вот ещё одна интересная задача: есть файлы с именами типа "имя.фамилия", и надо переименовать их в "фамилия_имя".
PS: Только не примите за наезд.
no subject
Date: 2010-11-14 05:01 pm (UTC)дело в то, что конкретно было в исходном вопросе? а была идея, что для решения задачи жизненно необходимы юникс-утилиты и/или их копия-адаптация типа сигвина
я на это сказал, что "все, что возможно в никсах - возможно и в командной строке винды" - пока что я с задачами справляюсь
нужно просто понять всю мощь связки for-find-dir - и можно решать любые задачи
я, например, делал парсер с кросс-поиском по многим csv-файлам с генерацией xml по шаблону, когда не было csv-xslt-парсера
я естественно подтверждаю, что мелкософту в винде все можно было бы сделать проще или по-другому, но нужно уметь использовать и то, что уже есть, по-возможности не тяготея к установке отдельного софта для каждой всплываемой задачи...
командная строка винды тоже не стоит на месте
я вполне могу решить и другие предложенные задачи, там будет все тот же знакомый for, но, пожалуйста, не в качестве экзамена, а только если я этим могу кому-либо помочь :)
no subject
Date: 2010-11-14 09:21 am (UTC)тогда вместо gtr в строке с if нужно написать lss
no subject
Date: 2010-11-12 01:25 pm (UTC)@echo off
dir /b /s > files.txt
for /f "delims=" %%i in (input.txt) do find /i "%%i" files.txt >>result.txt
for /f "delims=" %%i in (result.txt) do copy "%%i" "c:\target_dir_to_copy" /Y > nul 2> nul
строка 1: копируем список всех файлов на компе в файл files.txt, занимает пару минут
строка 2: ищем в нем согласно input.txt и складываем результаты в result.txt, занимает секунд по 10-30 на файл, в зависимости от количества файлов на компе и его скорости
строка 3: копируем файлы в каталог "c:\target_dir_to_copy" игнорируя ошибки и повторяющиеся файлы, время непрогнозируемо
правда, если файлов много и комп забит - то это на полночи
no subject
Date: 2010-11-12 01:27 pm (UTC)1. удалить старый result.txt
2. создать целевую папку (обязательно!)
no subject
Date: 2010-11-12 11:35 pm (UTC)Например, в списке файлы:
fileAB-001.doc
fileAB-002.doc
fileAB-003.doc
...
Задаем в поиске fileAB*.doc в любом менеджере файлов, я например пользуюсь Total Commander-ом, и он находит все файлы соответствующие маске.