Форум программистов, компьютерный форум, киберфорум
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.58/55: Рейтинг темы: голосов - 55, средняя оценка - 4.58
0 / 0 / 0
Регистрация: 23.08.2017
Сообщений: 30
1

Поиск и замена файлов из папки

17.10.2017, 15:57. Показов 10150. Ответов 18
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день
Подскажите как написать bat который будет выполнять следующие:
1. Есть папка в ней файлы, необходимо поискать файлы на диске C:\ и сравнить c содержимым
папки, все файлы которые нашлись при поиске необходимо скопировать в отдельную папки с сохранением структуры папок.
Пример:
папка1 (в ней файлы для поиска test1, 2,3) ищем на диске C:\ если нашли то все эти файлы копируем в папку бэкап, с такой же структурой папок как они были сохранены на диске С:\ лишние файлы и папки копировать не нужно.
2. После того как сделали, бэкап заменить все файлы которые мы нашли с нашей папки на диске С:\
3. Все эти действия записать в отдельный файл лог, когда, что копировалось, чем заменялось.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.10.2017, 15:57
Ответы с готовыми решениями:

Копирование TXT-файлов из одной папки и BMP-файлов из другой папки в папку, в которой находится пакетный файл
Доброго времени суток. У кого есть возможность сообразить какой код мне нужет чтобы сделать вот...

Копирование нескольких файлов из локальной папки в две сетевые папки с последующим удалением исходных файлов
Есть практическая задача: нужно накидать батник, который будет в определённое время брать из одной...

Автоматический поиск и замена файлов по имени
Существует 2 сложные системы папок и файлов. В конечном счете в них лежат файлы с одинаковым...

Поиск папки по части имени в указанном каталоге, последующее удаление её и файлов в ней
Ребята, всем привет! В батниках не силён ни разу Пытался сделать по аналогии по смежным темам, но...

18
199 / 209 / 69
Регистрация: 09.02.2016
Сообщений: 1,040
17.10.2017, 17:06 2
1.Пути надо свои написать.
2.Если поиск по всему диску С ,то это возможно будет долго все происходить.
Windows Batch file
1
2
3
4
5
6
7
8
@echo off 
for /f "tokens=*" %%a in ('dir /a:-d /b "%userprofile%\desktop\papka\*.*"') do (
for /f "tokens=*" %%b in ('dir /s /b "%userprofile%\desktop\Batch\%%a"') do (
xcopy  "%%b" "%userprofile%\desktop\papka2%%~pb" /i /y >>logcopy.txt
xcopy "%userprofile%\desktop\papka\%%a" "%%b" /y >>logcopy.txt 
)
)
pause
0
0 / 0 / 0
Регистрация: 23.08.2017
Сообщений: 30
17.10.2017, 17:20  [ТС] 3
Можно немного прокомментировать, что как работает?

Добавлено через 6 минут
C:\Users\oykalas3\desktop\Batch\test.sql
‘Є®ЇЁа®ў**® д*©«®ў: 1.
C:\Users\oykalas3\desktop\papka\test.sql
‘Є®ЇЁа®ў**® д*©«®ў: 1.
C:\Users\oykalas3\desktop\Batch\test.sql
‘Є®ЇЁа®ў**® д*©«®ў: 1.
C:\Users\oykalas3\desktop\papka\test.sql
‘Є®ЇЁа®ў**® д*©«®ў: 1.

Вывод в таком виде, не понятно
0
199 / 209 / 69
Регистрация: 09.02.2016
Сообщений: 1,040
17.10.2017, 17:24 4
Это кодировки.Я тоже не могу понять их))
Windows Batch file
1
2
3
4
5
6
7
8
9
10
@echo off 
for /f "tokens=*" %%a in ('dir /a:-d /b "%userprofile%\desktop\papka\*.*"') do (
for /f "tokens=*" %%b in ('dir /s /b "%userprofile%\desktop\Batch\%%a"') do (
xcopy  "%%b" "%userprofile%\desktop\papka2%%~pb" /i /y 
echo файл: "%%b" скопирован в: "%userprofile%\desktop\papka2%%~pb" >>logfile.txt
xcopy "%userprofile%\desktop\papka\%%a" "%%b" /y
echo файл: "%%b" заменен на "%userprofile%\desktop\papka\%%a" >>logfile.txt  
)
)
pause
Только надо заставить в логфайле русские буквы писать.А это кодировки.Я в них не понимаю)
0
0 / 0 / 0
Регистрация: 23.08.2017
Сообщений: 30
17.10.2017, 17:26  [ТС] 5
а подробнее что как выполняется
0
199 / 209 / 69
Регистрация: 09.02.2016
Сообщений: 1,040
17.10.2017, 17:32 6
2. Берем файл из папки
3.Ищем файл на диске С(в моем случае я искал в другой папке)
4.Копируем найденный файл и его структуру каталога в папку где должна лежать копия
5.Заносим в лог копируемый файл
6.Заменяем найденный файл файлом из папки
7.Заносим в лог заменяемый файл.
0
0 / 0 / 0
Регистрация: 23.08.2017
Сообщений: 30
17.10.2017, 17:41  [ТС] 7
не совсем понятно, исходная папка откуда копируете это "papka" (где находятся файлы для копирования)?
а для чего Папка Batch (в ней bat)?
запутался???? ):
0
199 / 209 / 69
Регистрация: 09.02.2016
Сообщений: 1,040
17.10.2017, 17:52 8
Это мои пути.
2.Сюда пишите путь где ваша папка с файлами находится("%userprofile%\desktop\papka\*.*")
Windows Batch file
1
for /f "tokens=*" %%a in ('dir /a:-d /b "%userprofile%\desktop\papka\*.*"')
3.Здесь пишите путь где надо искать похожий файл из папки.То есть C:\%%a
Windows Batch file
1
for /f "tokens=*" %%b in ('dir /s /b "%userprofile%\desktop\Batch\%%a"') do (
4.Здесь путь куда копируете найденный файл ("%userprofile%\desktop\papka2%%~pb")
Windows Batch file
1
xcopy  "%%b" "%userprofile%\desktop\papka2%%~pb" /i /y
6.Здесь путь откуда новый файл ("%userprofile%\desktop\papka\%%a")
Windows Batch file
1
xcopy "%userprofile%\desktop\papka\%%a" "%%b" /y
0
0 / 0 / 0
Регистрация: 23.08.2017
Сообщений: 30
17.10.2017, 17:54  [ТС] 9
спасибо, сейчас буду пытаться решить вопрос с кодировкой
0
199 / 209 / 69
Регистрация: 09.02.2016
Сообщений: 1,040
17.10.2017, 18:43 10
Код не рабочий кстатии)Так как копирует не только файлы искомые, но и папку с файлами которые используем в качестве образца для поиска )
0
0 / 0 / 0
Регистрация: 23.08.2017
Сообщений: 30
17.10.2017, 18:48  [ТС] 11
а как изменить?
проблему с кодировкой решил так:
chcp 1251 >nul
0
199 / 209 / 69
Регистрация: 09.02.2016
Сообщений: 1,040
17.10.2017, 20:04 12
Попробуйте
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
@echo off 
for /f "tokens=*" %%a in ('dir /a:-d /b "%userprofile%\desktop\Batch\*.*"') do (
call :1 "%%a"
)
pause
exit /b
:1
for /f "tokens=*" %%b in ('dir /s /b "%userprofile%\desktop\%~1"') do (
if "%userprofile%\desktop\Batch\%~1"=="%%b" (exit /b) else (xcopy "%%b" "%userprofile%\desktop\Batch\papka2%%~pb" /i &echo file: "%%b" skopirovan v: "%userprofile%\desktop\Batch\papka2%%~pb" >>logfile.txt)
if "%userprofile%\desktop\Batch\%~1"=="%%b" (exit /b) else (xcopy "%userprofile%\desktop\Batch\%~1" "%%b" /y & echo file: "%%b" zamenen na "%userprofile%\desktop\papka\Batch\%%~nxb" >>logfile.txt)
echo. >>logfile.txt
)
exit /b
0
4334 / 2124 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
17.10.2017, 20:12 13
Цитата Сообщение от tera2017 Посмотреть сообщение
с такой же структурой папок
Цитата Сообщение от tera2017 Посмотреть сообщение
лишние файлы и папки копировать не нужно
в конечной - да. По структуре, на cmd - смешно, если буквально что выше.

Добавлено через 2 минуты
и при совпадении имен файлов на других уровнях - какие действия?
0
199 / 209 / 69
Регистрация: 09.02.2016
Сообщений: 1,040
17.10.2017, 22:26 14
Еще так можно)
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
@echo off
for /f "tokens=*" %%a in ('dir /a:-d /b "%userprofile%\desktop\Batch\*.*"') do (
for /f "tokens=*" %%b in ('dir /b /s "%userprofile%\desktop\%%a"^|findstr /v /c:"%userprofile%\desktop\Batch"') do (
xcopy "%%b" "%userprofile%\desktop\Batch\papka2%%~pb" /i /y
echo file: "%%b" skopirovan v: "%userprofile%\desktop\Batch\papka2%%~pb" >>logfile.txt
xcopy "%userprofile%\desktop\Batch\%%~nxb" "%%b" /y
echo file: "%%b" zamenen na "%userprofile%\desktop\Batch\%%~nxb" >>logfile.txt
echo. >>logfile.txt
)
)
pause
1
0 / 0 / 0
Регистрация: 23.08.2017
Сообщений: 30
19.10.2017, 18:39  [ТС] 15
Файл исходные файлы копирует с папки

Добавлено через 6 минут
я про исходную папку, не срабатывает

Добавлено через 8 минут
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
@echo on
 
 
set /P time_s=Enter number:
set Day=%Date:~3,2%
set Mth=%Date:~0,2%
set Yr=%Date:~6,4%
set Time=%time:~,-3%
mkdir C:\WebServers\home\10.40.22.22\www\backup\%time_s%
 
for /f "tokens=*" %%a in ('dir /a:-d /b "C:\WebServers\home\10.40.22.22\www\temp\*.*"') do (
call :1 "%%a"
)
pause
exit /b
:1
for /f "tokens=*" %%b in ('dir /s /b "%C:\%~1"') do (
if "C:\WebServers\home\10.40.22.22\www\temp\%time_s%\%~1"=="%%b" (exit /b) else (xcopy "%%b" "C:\WebServers\home\10.40.22.22\www\backup\%time_s%\%%~pb" /i &echo file: "%%b" skopirovan v: "C:\WebServers\home\10.40.22.22\www\backup\%time_s%\~pb" >> C:\WebServers\home\10.40.22.22\www\log\%time_s%\logfile.txt)
if "C:\WebServers\home\10.40.22.22\www\temp\%time_s%\%~1"=="%%b" (exit /b) else (xcopy "C:\WebServers\home\10.40.22.22\www\temp\%time_s%\%~1" "%%b" /y & echo file: "%%b" zamenen na "C:\WebServers\home\10.40.22.22\www\temp\%time_s%\%%~nxb" >> C:\WebServers\home\10.40.22.22\www\log\%time_s%\logfile.txt)
echo. >>logfile.txt
)
::exit /b
 
 
 
pause
0
199 / 209 / 69
Регистрация: 09.02.2016
Сообщений: 1,040
20.10.2017, 09:14 16
Цитата Сообщение от alpap Посмотреть сообщение
и при совпадении имен файлов на других уровнях - какие действия?
Кстатии.А возможно ли совпадение имен на других уровнях.То есть может ли быть найдено три файла с одинаковым названием?

Добавлено через 1 минуту
Цитата Сообщение от tera2017 Посмотреть сообщение
Файл исходные файлы копирует с папки
Добавлено через 6 минут
я про исходную папку, не срабатывает
Не понял.

18 и 19 строки записаны не верно.Сравнение идет не с файлами из созданной папки,а с файлами из папки из которой копируем.Этосделано для того что бы не были найденны файлы из папки которой мы берем для поиска файлов по всему диску.Поэтому если название на весь диск оригинальное и больше негде не повторяется,то поиск в в новой папке не будет вестись потому что в поиске уже будет задейственен другой файл.

И удалите : перед exit /b

Добавлено через 7 минут
Но лучше использавать второй код.В Папке откуда берем файлы должна находится папка куда кидаем файлы.И больше в ней ничего не должно быть.
0
0 / 0 / 0
Регистрация: 23.08.2017
Сообщений: 30
20.10.2017, 09:53  [ТС] 17
И первый и второй вариант не работают
0
199 / 209 / 69
Регистрация: 09.02.2016
Сообщений: 1,040
20.10.2017, 13:19 18
Ну хз.
Попробуйте через администратора запустить.Может быть прав не хватает,что бы из определенных папок делать копии и перемещения.
0
4334 / 2124 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
20.10.2017, 13:33 19
tera2017,
найдите все нужные файлы на своем диске C:\, переместите в отдельную папку на не диске C:\ и заставьте все свои программы и утилиты и коды сохранять или создавать будущие бэкапы или просто нужные файлы на этом диске в этой папке.
Нормально решить сейчас свою задачу вы сможете с помощью PowerShell, искать файлы по всему диску сравнивая с файлами не просто папки, а каталога со структурой да еще имея желание сохранить структуру - это будет невыносимо долго на cmd и нет даже желания пытаться составить такой код.
0
20.10.2017, 13:33
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.10.2017, 13:33
Помогаю со студенческими работами здесь

Поиск файлов в папке и под папках, и замена в них строки по её номеру
В общем я в bat-никах вообще туго понимаю, никак не могу решить такую задачу, есть папка...

Перенос файлов из папки в папки под порядковыми номерами
Помогите пожалуйста написать bat фаил. Задача в следующем: существует 744 пустых папки ...

Распределение файлов из папки по части имени файла в папки, содержащие файлы с похожим именем (квитовка)
Добрый день! Искал по форуму, но мне не удалось найти похожее решение. К примеру имеется...

Преобразование файлов и перенос их в папки(названия папок содержится в именах файлов)
Доброй ночи! Тяжело быть глупой, помогите автоматизировать (пишу полную задачу, но если это...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru