Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Создать копию (дубль) файла в подпапках

Ответить
Настройки темы
CMD/BAT - Создать копию (дубль) файла в подпапках

Ветеран


Сообщения: 900
Благодарности: 86

Профиль | Отправить PM | Цитировать


Изменения
Автор: SharkyEXE
Дата: 30-06-2020
Здравствуйте.

Пожалуйста, научите, как при помощи cmd/bat файла сделать копию файла с точным названием с подпапках?

Например, есть много папок, в этих папках есть подпапки, в каждой из подпапок есть один и тот же файл с точным названием, например Вася.doc

1) Нужно в файле cmd/bat задать имя исходного файла

Вася.doc

1) Нужно в файле cmd/bat задать путь-корень, например C:\Root\

3) Запустить cmd/bat файл

4) На выходе в каждой подпапке внутри папки C:\Root\ будет создан файл Вася - копия.doc

Структура такая:
C:\Root\Привет 1\Папка-1\2020_Лст_о_30 января 2020 г. № 15_552.doc
C:\Root\Привет 1\Папка-2\2020_Лст_о_30 января 2020 г. № 15_552.doc
C:\Root\Привет 1\Папка-3\2020_Лст_о_30 января 2020 г. № 15_552.doc
C:\Root\Привет 1\Папка-4\2020_Лст_о_30 января 2020 г. № 15_552.doc
...
C:\Root\Привет 2\Папка-1\2020_Лст_о_30 января 2020 г. № 15_552.doc
C:\Root\Привет 2\Папка-2\2020_Лст_о_30 января 2020 г. № 15_552.doc
C:\Root\Привет 2\Папка-3\2020_Лст_о_30 января 2020 г. № 15_552.doc
C:\Root\Привет 2\Папка-4\2020_Лст_о_30 января 2020 г. № 15_552.doc
...
C:\Root\Привет 3\Папка-1\2020_Лст_о_30 января 2020 г. № 15_552.doc
C:\Root\Привет 3\Папка-2\2020_Лст_о_30 января 2020 г. № 15_552.doc
C:\Root\Привет 3\Папка-3\2020_Лст_о_30 января 2020 г. № 15_552.doc
C:\Root\Привет 3\Папка-4\2020_Лст_о_30 января 2020 г. № 15_552.doc
...

Черным, жирным выделил то, что меняется - это название папок

На выходе хочется так
C:\Root\Привет 1\Папка-1\2020_Лст_о_30 января 2020 г. № 15_552.doc
C:\Root\Привет 1\Папка-1\2020_Лст_о_30 января 2020 г. № 15_552 - копия.doc
C:\Root\Привет 1\Папка-2\2020_Лст_о_30 января 2020 г. № 15_552.doc
C:\Root\Привет 1\Папка-2\2020_Лст_о_30 января 2020 г. № 15_552 - копия.doc
C:\Root\Привет 1\Папка-3\2020_Лст_о_30 января 2020 г. № 15_552.doc
C:\Root\Привет 1\Папка-3\2020_Лст_о_30 января 2020 г. № 15_552 - копия.doc
C:\Root\Привет 1\Папка-4\2020_Лст_о_30 января 2020 г. № 15_552.doc
C:\Root\Привет 1\Папка-4\2020_Лст_о_30 января 2020 г. № 15_552 - копия.doc
...
C:\Root\Привет 2\Папка-1\2020_Лст_о_30 января 2020 г. № 15_552.doc
C:\Root\Привет 2\Папка-1\2020_Лст_о_30 января 2020 г. № 15_552 - копия.doc
C:\Root\Привет 2\Папка-2\2020_Лст_о_30 января 2020 г. № 15_552.doc
C:\Root\Привет 2\Папка-2\2020_Лст_о_30 января 2020 г. № 15_552 - копия.doc
C:\Root\Привет 2\Папка-3\2020_Лст_о_30 января 2020 г. № 15_552.doc
C:\Root\Привет 2\Папка-3\2020_Лст_о_30 января 2020 г. № 15_552 - копия.doc
C:\Root\Привет 2\Папка-4\2020_Лст_о_30 января 2020 г. № 15_552.doc
C:\Root\Привет 2\Папка-4\2020_Лст_о_30 января 2020 г. № 15_552 - копия.doc
...
C:\Root\Привет 3\Папка-1\2020_Лст_о_30 января 2020 г. № 15_552.doc
C:\Root\Привет 3\Папка-1\2020_Лст_о_30 января 2020 г. № 15_552 - копия.doc
C:\Root\Привет 3\Папка-2\2020_Лст_о_30 января 2020 г. № 15_552.doc
C:\Root\Привет 3\Папка-2\2020_Лст_о_30 января 2020 г. № 15_552 - копия.doc
C:\Root\Привет 3\Папка-3\2020_Лст_о_30 января 2020 г. № 15_552.doc
C:\Root\Привет 3\Папка-3\2020_Лст_о_30 января 2020 г. № 15_552 - копия.doc
C:\Root\Привет 3\Папка-4\2020_Лст_о_30 января 2020 г. № 15_552.doc
C:\Root\Привет 3\Папка-4\2020_Лст_о_30 января 2020 г. № 15_552 - копия.doc
...

Спасибо.

Отправлено: 20:29, 30-06-2020

 

Ветеран


Сообщения: 1274
Благодарности: 564

Профиль | Отправить PM | Цитировать


например:
Код: Выделить весь код
@echo off
set "d=C:\Root"
set "fi=C:\Вася.doc"
set "fo=Вася - копия.doc"

for /d /r "%d%" %%d in ("*") do >nul copy /y "%fi%" "%%d\%fo%"
pause
код сохранить в кодировке 866, запускать не в "C:\Root", выше например или из другой папки.
Это сообщение посчитали полезным следующие участники:

Отправлено: 20:45, 30-06-2020 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ветеран


Сообщения: 900
Благодарности: 86

Профиль | Отправить PM | Цитировать


alpap

Здравствуйте.

В программе AkelPad поправил код, выглядит так (кодировка 866) - файл 1.cmd
Код: Выделить весь код
@echo off
set "d=H:\Sort\Новая папка\2020-06-30_Л"
set "fi=2020_Лст_о_30 января 2020 г. № 15_552.doc"
set "fo=2020_Лст_о_30 января 2020 г. № 15_552 - копия.doc"

for /d /r "%d%" %%d in ("*") do >nul copy /y "%fi%" "%%d\%fo%"
pause
Запустил файл 1.cmd с рабочего стола - копия файла 2020_Лст_о_30 января 2020 г. № 15_552.doc не создалась

Приношу извинения, если не корректно не упомянул про русские буквы в названии папок, русские буквы в имени папок и файлов, пробелы и так далее, хотелось бы как написал в этом коде структуру
Код: Выделить весь код
set "d=H:\Sort\Новая папка\2020-06-30_Л"
set "fi=2020_Лст_о_30 января 2020 г. № 15_552.doc"
set "fo=2020_Лст_о_30 января 2020 г. № 15_552 - копия.doc"
Структура такая:
H:\Sort\Новая папка\2020-06-30_Л\Привет 1\Папка-1\2020_Лст_о_30 января 2020 г. № 15_552.doc
H:\Sort\Новая папка\2020-06-30_Л\Привет 1\Папка-2\2020_Лст_о_30 января 2020 г. № 15_552.doc
H:\Sort\Новая папка\2020-06-30_Л\Привет 1\Папка-3\2020_Лст_о_30 января 2020 г. № 15_552.doc
H:\Sort\Новая папка\2020-06-30_Л\Привет 1\Папка-4\2020_Лст_о_30 января 2020 г. № 15_552.doc
...
H:\Sort\Новая папка\2020-06-30_Л\Привет 2\Папка-1\2020_Лст_о_30 января 2020 г. № 15_552.doc
H:\Sort\Новая папка\2020-06-30_Л\Привет 2\Папка-2\2020_Лст_о_30 января 2020 г. № 15_552.doc
H:\Sort\Новая папка\2020-06-30_Л\Привет 2\Папка-3\2020_Лст_о_30 января 2020 г. № 15_552.doc
H:\Sort\Новая папка\2020-06-30_Л\Привет 2\Папка-4\2020_Лст_о_30 января 2020 г. № 15_552.doc
...
H:\Sort\Новая папка\2020-06-30_Л\Привет 3\Папка-1\2020_Лст_о_30 января 2020 г. № 15_552.doc
H:\Sort\Новая папка\2020-06-30_Л\Привет 3\Папка-2\2020_Лст_о_30 января 2020 г. № 15_552.doc
H:\Sort\Новая папка\2020-06-30_Л\Привет 3\Папка-3\2020_Лст_о_30 января 2020 г. № 15_552.doc
H:\Sort\Новая папка\2020-06-30_Л\Привет 3\Папка-4\2020_Лст_о_30 января 2020 г. № 15_552.doc
...

Черным, жирным выделил то, что меняется - это название папок

На выходе хочется так
H:\Sort\Новая папка\2020-06-30_Л\Привет 1\Папка-1\2020_Лст_о_30 января 2020 г. № 15_552.doc
H:\Sort\Новая папка\2020-06-30_Л\Привет 1\Папка-1\2020_Лст_о_30 января 2020 г. № 15_552 - копия.doc
H:\Sort\Новая папка\2020-06-30_Л\Привет 1\Папка-2\2020_Лст_о_30 января 2020 г. № 15_552.doc
H:\Sort\Новая папка\2020-06-30_Л\Привет 1\Папка-2\2020_Лст_о_30 января 2020 г. № 15_552 - копия.doc
H:\Sort\Новая папка\2020-06-30_Л\Привет 1\Папка-3\2020_Лст_о_30 января 2020 г. № 15_552.doc
H:\Sort\Новая папка\2020-06-30_Л\Привет 1\Папка-3\2020_Лст_о_30 января 2020 г. № 15_552 - копия.doc
H:\Sort\Новая папка\2020-06-30_Л\Привет 1\Папка-4\2020_Лст_о_30 января 2020 г. № 15_552.doc
H:\Sort\Новая папка\2020-06-30_Л\Привет 1\Папка-4\2020_Лст_о_30 января 2020 г. № 15_552 - копия.doc
...
H:\Sort\Новая папка\2020-06-30_Л\Привет 2\Папка-1\2020_Лст_о_30 января 2020 г. № 15_552.doc
H:\Sort\Новая папка\2020-06-30_Л\Привет 2\Папка-1\2020_Лст_о_30 января 2020 г. № 15_552 - копия.doc
H:\Sort\Новая папка\2020-06-30_Л\Привет 2\Папка-2\2020_Лст_о_30 января 2020 г. № 15_552.doc
H:\Sort\Новая папка\2020-06-30_Л\Привет 2\Папка-2\2020_Лст_о_30 января 2020 г. № 15_552 - копия.doc
H:\Sort\Новая папка\2020-06-30_Л\Привет 2\Папка-3\2020_Лст_о_30 января 2020 г. № 15_552.doc
H:\Sort\Новая папка\2020-06-30_Л\Привет 2\Папка-3\2020_Лст_о_30 января 2020 г. № 15_552 - копия.doc
H:\Sort\Новая папка\2020-06-30_Л\Привет 2\Папка-4\2020_Лст_о_30 января 2020 г. № 15_552.doc
H:\Sort\Новая папка\2020-06-30_Л\Привет 2\Папка-4\2020_Лст_о_30 января 2020 г. № 15_552 - копия.doc
...
H:\Sort\Новая папка\2020-06-30_Л\Привет 3\Папка-1\2020_Лст_о_30 января 2020 г. № 15_552.doc
H:\Sort\Новая папка\2020-06-30_Л\Привет 3\Папка-1\2020_Лст_о_30 января 2020 г. № 15_552 - копия.doc
H:\Sort\Новая папка\2020-06-30_Л\Привет 3\Папка-2\2020_Лст_о_30 января 2020 г. № 15_552.doc
H:\Sort\Новая папка\2020-06-30_Л\Привет 3\Папка-2\2020_Лст_о_30 января 2020 г. № 15_552 - копия.doc
H:\Sort\Новая папка\2020-06-30_Л\Привет 3\Папка-3\2020_Лст_о_30 января 2020 г. № 15_552.doc
H:\Sort\Новая папка\2020-06-30_Л\Привет 3\Папка-3\2020_Лст_о_30 января 2020 г. № 15_552 - копия.doc
H:\Sort\Новая папка\2020-06-30_Л\Привет 3\Папка-4\2020_Лст_о_30 января 2020 г. № 15_552.doc
H:\Sort\Новая папка\2020-06-30_Л\Привет 3\Папка-4\2020_Лст_о_30 января 2020 г. № 15_552 - копия.doc
...

Последний раз редактировалось SharkyEXE, 30-06-2020 в 21:00.


Отправлено: 20:51, 30-06-2020 | #3


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


SharkyEXE, временно уберите «>nul» и добавьте «rem» перед «@echo off» и посмотрите, что не так.

Отправлено: 21:04, 30-06-2020 | #4


Ветеран


Сообщения: 900
Благодарности: 86

Профиль | Отправить PM | Цитировать


Iska

Здравствуйте

Пишет, Не удаётся найти указанный файл

При этом файл 2020_Лст_о_30 января 2020 г. № 15_552.doc 200% есть в папках

Я может быть соовсем не так написал, просто по моей идее надо заходить в подпапку и внутри подпапки копировать файл 2020_Лст_о_30 января 2020 г. № АЛ-15_552.doc как 2020_Лст_о_30 января 2020 г. № 15_552 - копия.doc

Выйти из подпапки

Потом заходить в другую подпапку ниже и внутри подпапки копировать файл 2020_Лст_о_30 января 2020 г. № АЛ-15_552.doc как 2020_Лст_о_30 января 2020 г. № 15_552 - копия.doc

Выйти из подпапки

Потом заходить в другую подпапку ниже и внутри подпапки копировать файл 2020_Лст_о_30 января 2020 г. № АЛ-15_552.doc как 2020_Лст_о_30 января 2020 г. № 15_552 - копия.doc

...

Да, еще - у автора кода изначально исходное имя файла - указано как путь
set "fi=C:\Вася.doc"

Мне же надо указать просто исходное имя файла включая расширение
set "fi=Вася.doc" (без C:\)

PS. Вроде как помогло - изменения выделил

Было

for /d /r "%d%" %%d in ("*") do >nul copy /y "%fi%" "%%d\%fo%"

Стало

for /d /r "%d%" %%d in ("*") do >nul copy /y "%%d\%fi%" "%%d\%fo%"

Рабочий код

Код: Выделить весь код
@echo off
set "d=H:\Sort\Новая папка\2020-06-30_Л"
set "fi=2020_Лст_о_30 января 2020 г. № 15_552.doc"
set "fo=2020_Лст_о_30 января 2020 г. № 15_552 - копия.doc"

for /d /r "%d%" %%d in ("*") do >nul copy /y "%%d\%fi%" "%%d\%fo%"
pause

Последний раз редактировалось SharkyEXE, 30-06-2020 в 21:29.


Отправлено: 21:06, 30-06-2020 | #5


Аватара для Fors1k

Старожил


Сообщения: 193
Благодарности: 112

Профиль | Отправить PM | Цитировать


PowerShell
Код: Выделить весь код
param(
    $path = "H:\Sort\Новая папка\2020-06-30_Л",
    $file = "2020_Лст_о_30 января 2020 г. № 15_552.doc"
)cls

gci $path $file -Rec|foreach{copy-item -li $_.FullName (
"$($_.Directory)\"+$_.BaseName+' — копия'+$_.Extension)}

Последний раз редактировалось Fors1k, 30-06-2020 в 21:33.

Это сообщение посчитали полезным следующие участники:

Отправлено: 21:24, 30-06-2020 | #6



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Создать копию (дубль) файла в подпапках

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Разное - [решено] Как создать резервную копию windows 8? welcome2013 Microsoft Windows 8 и 8.1 1 15-08-2013 11:21
CMD/BAT - Если файл обновился то создать его копию Sasha_vinni Скриптовые языки администрирования Windows 1 09-04-2013 19:45
7 / 2008 R2 - [решено] Как создать предустановленную копию Windows Wolfness Автоматическая установка Windows 11 / 10 / 8 / 7 / Vista 3 25-03-2013 21:02
2008 R2 - wbadmin не могу создать резервную копию es5ape Windows Server 2008/2008 R2 4 05-10-2011 21:27
CMD/BAT - [решено] Назвать архив названием файла айкот Скриптовые языки администрирования Windows 8 23-09-2011 17:23




 
Переход