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

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

Ответить
Настройки темы
Любой язык - [решено] Скопировать файлы из папок

Пользователь


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

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


Здравствуйте, у меня очень нубский вопрос.
Мне надо из очень смешанной структуры папок перенести файлы вместе с папками в которых они расположены.
Из папки _Источник_ надо перенести все *.тхт в папку _Результат_ . Другие файлы не трогать.
Но уже без вложенности. Это что есть:
Код: Выделить весь код
├───Источник
│   │   кит.txt
│   │
│   ├───нудно
│   │   │   ненужен.zip
│   │   │   письмо.txt
│   │   │
│   │   └───долго
│   │       │   пурга.zip
│   │       │
│   │       └───ещё
│   │               винт.txt
│   │               шуруп.txt
│   │
│   └───шмапка
│           лев.txt
│           тигр.txt
А это что нужно получить:
Код: Выделить весь код
└───Результат
    ├───ещё
    │       винт.txt
    │       шуруп.txt
    │
    ├───Источник
    │       кит.txt
    │
    ├───нудно
    │       письмо.txt
    │
    └───шмапка
            лев.txt
            тигр.txt
Спасибо!

Отправлено: 19:09, 16-10-2018

 

Ветеран


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

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


Patroklos, давайте представим, что у нас есть каталог «Затупил» в каталогах «нудно», «долго» и «шмапка» с частично совпадающими именами файлов, но различающимся содержимым (полностью или частично). Например, в каждом из трёх каталогов «Затупил» есть файл «Выплыл косяк.txt», и везде — разного размера. Наши действия?
Это сообщение посчитали полезным следующие участники:

Отправлено: 20:07, 16-10-2018 | #2



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

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


Пользователь


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

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


Согласен - затупил.
Если это проще то перезаписываем. А лучше переименовываем.

Отправлено: 20:39, 16-10-2018 | #3


Ветеран


Contributor


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

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


Patroklos,
Если перезаписываем
Код: Выделить весь код
@Echo off
	Set "BoxIn=Z:\Источник"
	Set "BoxOut=Z:\Результат"
	Set "Mask=*.txt"

	FOR /R "%BoxIn%" %%f IN ("%Mask%") DO Set "NDir=%%~dpf" &Call :FMove "%%f" "%%NDir:~0,-1%%" "%BoxOut%"
GoTo :Eof

:FMove
	Set "Out=%~3\%~nx2"
	If Not Exist "%Out%" Md "%Out%"
	Move /Y %1 "%Out%\" >nul
GoTo :Eof
Если переименовываем
Код: Выделить весь код
@Echo off
	Set "BoxIn=Z:\Источник"
	Set "BoxOut=Z:\Результат"
	Set "Mask=*.txt"

	FOR /R "%BoxIn%" %%f IN ("%Mask%") DO Set "NDir=%%~dpf" &Call :FMove "%%f" "%%NDir:~0,-1%%" "%BoxOut%"
GoTo :Eof

:FMove
	Set "Out=%~3\%~nx2"
	If Not Exist "%Out%" Md "%Out%"
	Set /A i=1000
	Set "NewName=%Out%\%~nx1"
	:Begin
		If Not Exist "%NewName%" Move %1 "%NewName%" >nul &GoTo :Eof
		Set /A i+=1
		Set "NewName=%Out%\%~n1_%i:~1%%~x1"
	GoTo :Begin
GoTo :Eof

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 16-10-2018 в 22:38.

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

Отправлено: 22:09, 16-10-2018 | #4


Ветеран


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

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


Цитата Patroklos:
Согласен - затупил. »
Вообще-то это была аллюзия на нудно и шмапка .

Отправлено: 22:45, 16-10-2018 | #5


Пользователь


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

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


Цитата megaloman:
Если перезаписываем
Если переименовываем »
Супер,супер,супер! Как всегда безукоризненно! Спасибо!

Цитата Iska:
Вообще-то это была аллюзия на нудно и шмапка »
А теперь понятно! Написал я и понял что затупил.

Отправлено: 22:53, 16-10-2018 | #6


Пользователь


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

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


Ещё раз спасибо. У меня остался один непринципиальный вопрос.
Скрипт отработал на отлично но у меня этих папок семь
и я должен буду время от времени повторять этот процесс.
В скрипте есть возможность перечислить папки через запятую
или мне сделать семь батников?

Отправлено: 09:45, 17-10-2018 | #7


Ветеран


Contributor


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

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


Patroklos,
Код: Выделить весь код
@Echo Off
	Call :In "Z:\Источник" "*.txt" "Z:\Результат"
	Call :In "Z:\Источник 1" "*.txt" "Z:\Результат 12"
	Call :In "Z:\Источник 2" "*.txt" "Z:\Результат 12"
GoTo :Eof

:In
	FOR /R "%~1" %%f IN ("%~2") DO Set "NDir=%%~dpf" &Call :FMove "%%f" "%%NDir:~0,-1%%" "%~3"
GoTo :Eof

:FMove
................................  далее кусок из предыдущего кода
ПишИте хоть 100 строк с Call, при этом Маски и выходные папки могут совпадать или не совпадать при разных вызовах

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.

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

Отправлено: 10:56, 17-10-2018 | #8


Пользователь


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

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


Спасибо большое!

Отправлено: 11:47, 17-10-2018 | #9


Ветеран


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

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


Если результирующий каталог и маски совпадают, то можно сократить до (не проверялось):
Код: Выделить весь код
…
for %%i in (
	"Z:\Источник 1"
	"Z:\Источник 2"
	"Z:\Источник 3\Какой-то каталог"
	"Z:\Источник 3\Ещё какой-то каталог"
) do call :In "%%~i" "*.txt" "Z:\Единый результирующий каталог"
…
Это сообщение посчитали полезным следующие участники:

Отправлено: 12:23, 17-10-2018 | #10



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Скопировать файлы-сателлиты из папки в папку Patroklos Скриптовые языки администрирования Windows 6 29-01-2018 12:04
CMD/BAT - Скопировать файлы из папок по определенному названию JKop Скриптовые языки администрирования Windows 19 28-10-2016 21:43
Прочее - как скопировать файлы из EXT2 в NTFS? Victor75 Общий по Linux 10 28-03-2014 01:11
CMD/BAT - скопировать из удаленнего компьютера состоящией в рабочей группе файлы j-kidd999 Скриптовые языки администрирования Windows 0 19-08-2013 13:54
CMD/BAT - Скопировать все файлы из одного каталога в другой Pavelnt Скриптовые языки администрирования Windows 5 10-03-2013 07:08




 
Переход