Форум программистов, компьютерный форум, киберфорум
Наши страницы
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
tera2017
0 / 0 / 0
Регистрация: 23.08.2017
Сообщений: 30
1

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

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

Добрый день
Подскажите как написать bat который будет выполнять следующие:
1. Есть папка в ней файлы, необходимо поискать файлы на диске C:\ и сравнить c содержимым
папки, все файлы которые нашлись при поиске необходимо скопировать в отдельную папки с сохранением структуры папок.
Пример:
папка1 (в ней файлы для поиска test1, 2,3) ищем на диске C:\ если нашли то все эти файлы копируем в папку бэкап, с такой же структурой папок как они были сохранены на диске С:\ лишние файлы и папки копировать не нужно.
2. После того как сделали, бэкап заменить все файлы которые мы нашли с нашей папки на диске С:\
3. Все эти действия записать в отдельный файл лог, когда, что копировалось, чем заменялось.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.10.2017, 15:57
Ответы с готовыми решениями:

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

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

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

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

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

18
ZoOoO
177 / 173 / 56
Регистрация: 09.02.2016
Сообщений: 878
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
tera2017
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
ZoOoO
177 / 173 / 56
Регистрация: 09.02.2016
Сообщений: 878
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
tera2017
0 / 0 / 0
Регистрация: 23.08.2017
Сообщений: 30
17.10.2017, 17:26  [ТС] 5
а подробнее что как выполняется
0
ZoOoO
177 / 173 / 56
Регистрация: 09.02.2016
Сообщений: 878
17.10.2017, 17:32 6
2. Берем файл из папки
3.Ищем файл на диске С(в моем случае я искал в другой папке)
4.Копируем найденный файл и его структуру каталога в папку где должна лежать копия
5.Заносим в лог копируемый файл
6.Заменяем найденный файл файлом из папки
7.Заносим в лог заменяемый файл.
0
tera2017
0 / 0 / 0
Регистрация: 23.08.2017
Сообщений: 30
17.10.2017, 17:41  [ТС] 7
не совсем понятно, исходная папка откуда копируете это "papka" (где находятся файлы для копирования)?
а для чего Папка Batch (в ней bat)?
запутался???? ):
0
ZoOoO
177 / 173 / 56
Регистрация: 09.02.2016
Сообщений: 878
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
tera2017
0 / 0 / 0
Регистрация: 23.08.2017
Сообщений: 30
17.10.2017, 17:54  [ТС] 9
спасибо, сейчас буду пытаться решить вопрос с кодировкой
0
ZoOoO
177 / 173 / 56
Регистрация: 09.02.2016
Сообщений: 878
17.10.2017, 18:43 10
Код не рабочий кстатии)Так как копирует не только файлы искомые, но и папку с файлами которые используем в качестве образца для поиска )
0
tera2017
0 / 0 / 0
Регистрация: 23.08.2017
Сообщений: 30
17.10.2017, 18:48  [ТС] 11
а как изменить?
проблему с кодировкой решил так:
chcp 1251 >nul
0
ZoOoO
177 / 173 / 56
Регистрация: 09.02.2016
Сообщений: 878
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
alpap
1450 / 1166 / 381
Регистрация: 26.04.2015
Сообщений: 4,115
17.10.2017, 20:12 13
Цитата Сообщение от tera2017 Посмотреть сообщение
с такой же структурой папок
Цитата Сообщение от tera2017 Посмотреть сообщение
лишние файлы и папки копировать не нужно
в конечной - да. По структуре, на cmd - смешно, если буквально что выше.

Добавлено через 2 минуты
и при совпадении имен файлов на других уровнях - какие действия?
0
ZoOoO
177 / 173 / 56
Регистрация: 09.02.2016
Сообщений: 878
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
tera2017
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
ZoOoO
177 / 173 / 56
Регистрация: 09.02.2016
Сообщений: 878
20.10.2017, 09:14 16
Цитата Сообщение от alpap Посмотреть сообщение
и при совпадении имен файлов на других уровнях - какие действия?
Кстатии.А возможно ли совпадение имен на других уровнях.То есть может ли быть найдено три файла с одинаковым названием?

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

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

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

Добавлено через 7 минут
Но лучше использавать второй код.В Папке откуда берем файлы должна находится папка куда кидаем файлы.И больше в ней ничего не должно быть.
0
tera2017
0 / 0 / 0
Регистрация: 23.08.2017
Сообщений: 30
20.10.2017, 09:53  [ТС] 17
И первый и второй вариант не работают
0
ZoOoO
177 / 173 / 56
Регистрация: 09.02.2016
Сообщений: 878
20.10.2017, 13:19 18
Ну хз.
Попробуйте через администратора запустить.Может быть прав не хватает,что бы из определенных папок делать копии и перемещения.
0
alpap
1450 / 1166 / 381
Регистрация: 26.04.2015
Сообщений: 4,115
20.10.2017, 13:33 19
tera2017,
найдите все нужные файлы на своем диске C:\, переместите в отдельную папку на не диске C:\ и заставьте все свои программы и утилиты и коды сохранять или создавать будущие бэкапы или просто нужные файлы на этом диске в этой папке.
Нормально решить сейчас свою задачу вы сможете с помощью PowerShell, искать файлы по всему диску сравнивая с файлами не просто папки, а каталога со структурой да еще имея желание сохранить структуру - это будет невыносимо долго на cmd и нет даже желания пытаться составить такой код.
0
20.10.2017, 13:33
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.10.2017, 13:33

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

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

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


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru