Форум программистов, компьютерный форум, киберфорум
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 28.02.2021
Сообщений: 119

Создать bat на копирование файлов из большого каталога с вложенными папками

04.07.2022, 14:41. Показов 1171. Ответов 13

Студворк — интернет-сервис помощи студентам
Здравствуйте!

По работе понадобилось ежедневно искать большое количество файлов из каталога с большим количеством вложенных папок.
Хотелось бы как-то автоматизировать эту работу, вот в чём заключается задача:

Есть .txt файл, в котором каждая строка - название файла без расширения (все файлы в каталогах в расширении .png)
Нужно написать батник, который будет искать каждый файл из каталога по списку из txt файла и копировать всё в отдельную папку по пути "C:\Users\Александр Кузнецов\Desktop\Макеты на сегодня".

Важный момент: в списке могут быть и будут повторения, хотелось бы, чтобы в итоговой папке эти копии БЫЛИ. То есть, если в списке 2 раза повторяется cup_Cats1, то в итоговой папке должно быть cup_Cats1.png и cup_Cats1 (1).png.

Путь к каталогу: "C:\YandexDisk-Axe11ius"
TXT-файл будет находиться в "C:\Users\Александр Кузнецов\Desktop\Макеты.txt"

Пример каталога и файлов по ссылке ниже, в архив не влезло бы: https://disk.yandex.ru/d/it268v80mN96XQ
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
04.07.2022, 14:41
Ответы с готовыми решениями:

Копирование папки с вложенными папками и файлами
Всем привет. Столкнулся с такой проблемой. Нашел в интернете код копирования папки со всем ее содержимым: void CopyDir(string...

Копирование директории с вложенными папками и файлами
Сабж возможен при помощи библиотечной функции или писать самому на основе FindAllFiles, ForceDirectory и CopyFile ? Как тогда находить...

Копирование папки со всеми вложенными папками, кроме одной
Доброго времени суток! Помогите, пожалуйста! Как скопировать папку со всеми вложенными папками и файлами, кроме одной вложенной...

13
3449 / 1110 / 494
Регистрация: 29.05.2016
Сообщений: 4,566
04.07.2022, 16:06
ArtMastex, добрый день! Пробуйте:
Windows Batch file
1
2
3
4
5
6
7
8
9
@echo off
set "list=C:\Users\Александр Кузнецов\Desktop\Макеты.txt"
set "source=C:\YandexDisk-Axe11ius"
set "destination=C:\Users\Александр Кузнецов\Desktop\Макеты на сегодня"
powershell -executionpolicy bypass -command "$list=Get-Content '%list%';" ^
    "$files=Get-ChildItem '%source%' -file -Recurse | where {$_.Extension -eq '.png'};" ^
    "$list | foreach {$iter=$_; $files | where {$_.BaseName -eq $iter} | foreach {$basename=$_.basename; if (Test-Path """%destination%\$($_.name)""" -PathType Leaf) {$duplicate=Get-ChildItem '%destination%' -file | where {$_.Name -match """^$($basename)"""}; if ($duplicate) {if ($duplicate.count -gt 1) {Copy-Item $_.FullName """%destination%\$($_.BaseName) ($($duplicate.count-1))$($_.Extension)"""} else {Copy-Item $_.FullName """%destination%\$($_.BaseName) (1)$($_.Extension)"""}}} else {Copy-Item $_.FullName '%destination%'}}}"
pause
exit
Примечание
1) Скрипт необходимо сохранить в кодировке OEM-866
0
0 / 0 / 0
Регистрация: 28.02.2021
Сообщений: 119
04.07.2022, 16:26  [ТС]
Сработало, однако когда в списке названия копировались больше 2 раз, в итоговой папке были только два копии. А надо, чтобы если в списке n копий, в итоговой папке должно быть столько же.

Заметил, что в условии задачи привёл пример только с 2мя повторениями, но в тестовой выборке в файле специально прописывал больше повторений для некоторых строчек.
0
3449 / 1110 / 494
Регистрация: 29.05.2016
Сообщений: 4,566
04.07.2022, 16:34
ArtMastex, я догадывался, что эта проблема всплывет... Тогда мне нужно понимание. У Вас в списке указаны, допустим, 3 повторения. В массиве файлов имя каждого файла всегда уникально?
0
0 / 0 / 0
Регистрация: 28.02.2021
Сообщений: 119
04.07.2022, 16:39  [ТС]
Да, в каталоге у каждого файла уникальное имя. Формат имени *_*(ЧИСЛО).png

То есть, cup_Cats1.png, mug_Naruto34.png, Avcup_Boys123.png, kal_Gosling14.png

В списке, например, могут идти:
kal_Gosling14
kal_Gosling14
kal_Gosling14
kal_Gosling14

И мне надо, чтобы в итоговой папке были 4 файла, kal_Gosling14.png, kal_Gosling14 (1).png, kal_Gosling14 (2).png, kal_Gosling14 (3).png
0
3449 / 1110 / 494
Регистрация: 29.05.2016
Сообщений: 4,566
04.07.2022, 17:27
Лучший ответ Сообщение было отмечено ArtMastex как решение

Решение

ArtMastex, пробуйте этот вариант:
Windows Batch file
1
2
3
4
5
6
7
8
9
@echo off
set "list=C:\Users\Александр Кузнецов\Desktop\Макеты.txt"
set "source=C:\YandexDisk-Axe11ius"
set "destination=C:\Users\Александр Кузнецов\Desktop\Макеты на сегодня"
powershell -executionpolicy bypass -command "$list=Get-Content '%list%';" ^
    "$files=Get-ChildItem '%source%' -file -Recurse | where {$_.Extension -eq '.png'};" ^
    "$list | group {$_} | foreach {$basename=$_.name; if ($_.count -eq 1) {$files | where {$_.BaseName -eq $basename} | foreach {Copy-Item $_.fullname '%destination%'}}; if ($_.count -gt 1) {1..$($_.count) | foreach -Begin {$file=$files | where {$_.BaseName -eq $basename}} -Process {if ($_ -eq 1) {Copy-Item $file.fullname '%destination%'} else {Copy-Item $file.fullname """%destination%\$($file.basename) ($($_-1))$($file.extension)"""}}}}"
pause
exit
1
0 / 0 / 0
Регистрация: 28.02.2021
Сообщений: 119
04.07.2022, 17:44  [ТС]
Огромное вам спасибо, всё заработало! Вы снова меня спасли)
0
3449 / 1110 / 494
Регистрация: 29.05.2016
Сообщений: 4,566
04.07.2022, 17:47
ArtMastex, да не за что
0
 Аватар для Angry Old Man
3004 / 744 / 313
Регистрация: 26.03.2022
Сообщений: 1,390
Записей в блоге: 1
04.07.2022, 17:56
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
@Echo Off
cls
>nul chcp 1251
    Set "BoxIn=C:\YandexDisk-Axe11ius"
    Set "BoxOut=C:\Users\Александр Кузнецов\Desktop\Макеты на сегодня"
    Set "FileList=C:\Users\Александр Кузнецов\Desktop\Макеты.txt"
    sET "Ext=png"
 
    For /F "usebackq delims=" %%i In (`2^>nul More "%FileList%"`) Do (
        For /F "usebackq delims=" %%f In (`2^>nul Dir /B /S /A:-D "%BoxIn%\%%i.%Ext%"`) Do Call :MyCopy "%%f" "%BoxOut%"
    )                                                                                                              %
pause
Exit /B 0
 
:MyCopy
    If Not Exist "%~2\%~nx1" >nul Copy %1 "%~2\" &Exit /B 0
    Set /A N=100
    :Begin
        Set /A N+=1
        If Not Exist "%~2\%~n1(%N:~-2%)%~x1" >nul Copy %1 "%~2\%~n1(%N:~-2%)%~x1" &Exit /B 0
        GoTo :Begin
Exit /B 0
Сохранить в 1251 кодировке
Не увидел, что решение уже есть. Прав удалить пост у меня нет Однако, у меня чистый CMD
2
0 / 0 / 0
Регистрация: 28.02.2021
Сообщений: 119
13.07.2022, 12:05  [ТС]
Можете пожалуйста дописать удаление содержимого папки "Макеты на сегодня" перед копированием в неё изображений?
Условно, если там уже есть 100 файлов, то они удаляются, и только потом туда копируются файлы из txt файла

Я поискал варианты сам, но у меня из-за незнания синтаксиса не получилось внедрить эту команду правильно...
0
3449 / 1110 / 494
Регистрация: 29.05.2016
Сообщений: 4,566
13.07.2022, 13:26
ArtMastex, после 4-ой строчки добавьте строку:
Windows Batch file
1
del /f /q "%destination%\*"
1
0 / 0 / 0
Регистрация: 28.02.2021
Сообщений: 119
13.07.2022, 13:33  [ТС]
Большущее спасибо!
0
 Аватар для Angry Old Man
3004 / 744 / 313
Регистрация: 26.03.2022
Сообщений: 1,390
Записей в блоге: 1
13.07.2022, 13:33
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
27
28
29
@Echo Off
cls
>nul chcp 1251
        Set "BoxIn=C:\YandexDisk-Axe11ius"
        Set "BoxOut=C:\Users\Александр Кузнецов\Desktop\Макеты на сегодня"
        Set "FileList=C:\Users\Александр Кузнецов\Desktop\Макеты.txt"
        Set "Ext=png"
    Set /A Max=99
 
        Pushd "%BoxOut%" &&(
        For /F "usebackq Skip=%Max% delims=" %%i In (`2^>nul Dir /B /A:-D *.*`) Do 2>nul Rd /S /Q "%BoxOut%" &GoTo :Continue
        :Continue
            Popd
    )
 
        For /F "usebackq delims=" %%i In (`2^>nul More "%FileList%"`) Do (
            For /F "usebackq delims=" %%f In (`2^>nul Dir /B /S /A:-D "%BoxIn%\%%i.%Ext%"`) Do Call :MyCopy "%%f" "%BoxOut%"
        )
pause
Exit /B 0
 
:MyCopy
    If Not Exist "%~2\%~nx1" >nul Copy %1 "%~2\" &Exit /B 0
    Set /A N=100
    :Begin
        Set /A N+=1
        If Not Exist "%~2\%~n1(%N:~-2%)%~x1" >nul Copy %1 "%~2\%~n1(%N:~-2%)%~x1" &Exit /B 0
        GoTo :Begin
Exit /B 0
0
3449 / 1110 / 494
Регистрация: 29.05.2016
Сообщений: 4,566
13.07.2022, 13:34
ArtMastex, не за что
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
13.07.2022, 13:34
Помогаю со студенческими работами здесь

Поиск самых новых файлов в папке с вложенными папками
Добрый день, Есть директория с вложенными папками, глубина вложений папок = 3. Во всех папках периодически появляются новые версии...

Копирование каталога со всеми вложенными подкаталогами и файлами
Нужно скопировать каталог со всеми вложенными подкаталогами(кроме пустых) и файлами в другой каталог (кроме файлов с расширениями tmp и...

Создать в папке ещё одну папку с другими папками вложенными друг в друга
как создать в папке ещё одну папку с другими папками вложенными друг в друга равного количеству символов в созданном файле.

Копирование каталога, если несколько файлов из этого каталога заняты процессом
Подскажите пожалуйста как можно скопировать каталог в котором несколько файлов заняты процессом, то бишь они не копируются... в общем мне...

Копирование файлов между сетевыми папками
Всем доброго времени суток. Есть сетевые папки Network_Folder1 и Network_Folder2 Состав папки Network_Folder1 примерно следующий: ...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru