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

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

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

Новый участник


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

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


Здравствуйте!
Можете подсказать, как реализовать следующее:
Есть папка С:\Nodes, в ней одна или несколько папок такого формата - RU.*.*
Нужно пройтись по каждой такой папке и внутри из папки Config скопировать файлы config.xml.
И разложить эти файлы так: на С:\backup, здесь для каждого файла создавать папку с тем же названием RU.*.* (то есть название папки такое же, как то откуда мы его взяли).
Надеюсь, всё понятно написано)
Заранее благодарю за помощь.

Отправлено: 14:48, 14-10-2016

 

Новый участник


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

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


megaloman, да, то что нужно, спасибо! А над скриптом для восстановления сижу целый день.
Хотелось, чтобы при запуске скрипта пользователю вывелся список всех папок с бэкапами, типа:
1. 19.10.2016
2. 20.10.2016
и т.д.
Это сделала. Только с кодировкой проблемы - вместо русских букв символы, на этом пока не зацикливалась, пытаюсь сделать само восстановление.
Пользователь должен ввести число, например, 2, после чего будут восстановлены файлы из папки 20.10.2016. Восстановлены туда же, откуда мы их брали, то есть на С:\Nodes по папкам Ru.*.*
Вот как пытаюсь преобразовать код в обратную операцию, но пока безуспешно. Не пойму, как указать момент куда копировать - по папкам Ru.*.* (в коде поставила ??????????????????????)

@Echo Off
SETLOCAL EnableDelayedExpansion

Set "Log=%~dpnx0.log"
set num=1
echo доступные бекапы
for /f delims^=^"^ tokens^=1 %%i in ('forfiles /p "c:\backup" /c "cmd /c if @isdir==TRUE echo @file"') do (
echo !num!. %%i
set /a num+=1
)

set /P var=Введите номер бекапа:
set num1=1
for /f delims^=^"^ tokens^=1 %%i in ('forfiles /p "c:\backup" /c "cmd /c if @isdir==TRUE echo @file"') do (
if !num1! equ %var% (
set backupfolder=%%i
goto rec
)
set /a num1+=1
)

echo Резервная копия не найдена. Работа скрипта прекращена. >>"%Log%"
goto end

:rec
echo Будет использована резервная копия %backupfolder% >>"%Log%"

Set "InMask=C:\backup\%backupfolder%\"
Set "InFile=Ru.*.*\Config.xml"
Set "OutDir=C:\Nodes"

FOR /F "usebackq delims=" %%d IN (`Dir "%InMask%" /A:D /B /S 2^>nul`) DO (
If Exist "%%d\%InFile%" (
Copy "%%d\%InFile%" "%OutDir%\????????????????????????\Config\" >nul && Echo "%%d\%InFile%" ---^> "%OutDir%\????????????????????????\Config\" >>"%Log%"
)
)

:end

Отправлено: 17:42, 20-10-2016 | #11



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

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


Ветеран


Contributor


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

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


Я не читатель, я писатель , поэтому в Вашем коде не сильно копался. Как я понял, Вы выбираете бэкап за определённую дату-время и восстанавливаете все конфиги, которые там есть.
Попробуйте
Код: Выделить весь код
@Echo Off
cls

Set "InMask=C:\Nodes\Ru.*.*"
Set "InFile=Config"
Set "OutDir=C:\Backup"

SetLocal EnableExtensions EnableDelayedExpansion

Set "DirFrom="
FOR /F "usebackq delims=" %%d IN (`Dir "%OutDir%" /A:D /B /O:-D /T:C 2^>nul`) DO (
	Set "Sele="
    	Set /P "Sele=Доступна копия %%d.  Восстанавливаем (Y), Далее (?), Закончить (Enter) "
	If /I "!Sele!"=="Y" Set "DirFrom=%%d" &GoTo :Continue
	If /I Not "!Sele!"=="?" GoTo :Eof
)
:Continue

If "%DirFrom%"=="" (
	Echo Папка с восстанавливаемыми копиями не выбрана
	Pause
	GoTo :Eof
)

Set "Log=%~dpnx0.log"

Set "OutDir=%OutDir%\%DirFrom%"

FOR /F "usebackq delims=" %%d IN (`Dir "%InMask%" /A:D /B /S 2^>nul`) DO (
	If Exist "%%d\%InFile%" If Exist "%OutDir%\%%~nxd\" (
		Echo "%OutDir%\%%~nxd\*.*" ---^> "%%d\%InFile%\"
	 	Copy "%OutDir%\%%~nxd\*.*" "%%d\%InFile%\" >nul && Echo "%OutDir%\%%~nxd\*.*" ---^> "%%d\%InFile%\" >>"%Log%" 
	)  
)
Я не пошел по пути нумерации бэкапов - а что, если их список на экран не поместится, как выбирать? Я предоставляю возможность выбрать конкретный бэкап начиная с самого свежего.
Чтобы не было зюкочек в диалогах и сообщениях - сохраните батник в 866 кодировке.
Повторюсь, мне всё это не нравится, при нескольких пользователях такие неконтролируемые возможности приведут к конфликтам.

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


Последний раз редактировалось megaloman, 21-10-2016 в 19:04.

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

Отправлено: 17:32, 21-10-2016 | #12

tyt tyt вне форума

Ветеран


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

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


megaloman,
Не могли бы и мне помочь создать батник для запуска копирования(когда нужно-дамы запустят).
Нужно копировать измененные файлы из папки C:\Dvo\Bu в домашней сети на \\USB\Dvo\Bu (написал USB так как не помню название съемного носителя)это для одного компьютера
и для другого из
C:\Dvo\St в \\USB\Dvo\St

Отправлено: 22:48, 21-10-2016 | #13


Ветеран


Contributor


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

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


Цитата название съемного носителя:
\\USB\Dvo\Bu \\USB\Dvo\St
Так обозначаются не съёмные носители, а сетевой путь на компьютер c именем USB на папку с общим доступом Dvo и подпапки в этой папке Bu и St. Что Вы имеете ввиду? Что Вы понимаете под названием съемного носителя?
Если это и в самом деле сетевые пути, то батник из одной строки:
Код: Выделить весь код
xcopy "С:\Dvo\Bu\*.*" "\\USB\Dvo\Bu\" /E /D /Y
Аналогично и для St
А еще лучше без батника: создать значок на xcopy и добавить туда параметры.

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


Последний раз редактировалось megaloman, 21-10-2016 в 23:47.

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

Отправлено: 23:25, 21-10-2016 | #14

tyt tyt вне форума

Ветеран


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

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


megaloman,
Это я со своего взял-у меня в сети есть ресивер \\VUDUO2\Harddisk
А у них к одному подключен жесткий диск через USB и второй компьютер его видит через сеть.
Я в понедельник посмотрю точный путь

Отправлено: 23:48, 21-10-2016 | #15


Новый участник


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

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


megaloman, спасибо, всё работает)
Тоже взялась за копирование файлов на другой сервер в домене.
Делаю по вашему примеру:
Цитата megaloman:
xcopy "С:\Dvo\Bu\*.*" "\\USB\Dvo\Bu\" /E /D /Y »
xcopy "С:\test3\*.*" "\\10.52.10.175\Test\" /E
Но папка с файлами не копируется, "Неправильно указан диск".
Что может быть не так? Папка Test в общем доступе.

Отправлено: 18:08, 25-10-2016 | #16


Ветеран


Contributor


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

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


JKop, У меня подобная конструкция прекрасно работает. ИМХО, папки по указанному пути нет. Я получил такое сообщение, когда сослался на несуществующую папку. Сделайте
Dir "\\10.52.10.175\Test\" - скорее всего получите "Неправильное сетевое имя"
Пытаюсь телепатировать:

Ваша папка Test - не имя сетевого ресурса, а папка внутри сетевого ресурса, например:
"\\10.52.10.175\Share\Test\"

Проверьте доступность сервера
ping 10.52.10.175

Если есть файл-менеджер типа Far или Total Commander, посмотрите, видна ли папка Test при просмотре сети.

Попробуйте выполнить локально на компе 10.52.10.175 команду
net share
Будет ли там помянута папка Test ?

Возможно, файервол сервера блокирует доступ на папку.
В общем, больше идей нет.

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


Последний раз редактировалось megaloman, 25-10-2016 в 20:17.


Отправлено: 20:08, 25-10-2016 | #17

tyt tyt вне форума

Ветеран


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

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


megaloman,
Затянулось у меня аж до пятницы.
Вот исходные данные

На первом компьютере нужно копировать все измененные и новые файлы и папки
с C:\dvo32 в E:\Lohnverrechnungs PC\Dvo32
и
с C:\EURONORM в E:\Lohnverrechnungs PC\EURONORM

На втором компьютере
с C:\dvo32 в \\LOHN\Sicherung\Buchhaltung PC\Dvo32
и
с C:\EURONORM в \\LOHN\Sicherung\Buchhaltung PC\EURONORM

Отправлено: 19:24, 28-10-2016 | #18


Ветеран


Contributor


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

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


Цитата Фонвизин:
Ах, мой батюшка! Да извозчики-то на что ж? Это их дело. Это-таки и наука-то не дворянская. Дворянин только скажи: повези меня туда, свезут, куда изволишь.
tyt, Все проблемы - в нежелании почитать описание команды xcopy /?. Там всё написано.
На первом компьютере нужно копировать все измененные и новые файлы и папки
Код: Выделить весь код
Xcopy "C:\dvo32\*.*" "E:\Lohnverrechnungs PC\Dvo32\" /D /E /R /H /C /K /Y 
Xcopy "C:\EURONORM\*.*" "E:\Lohnverrechnungs PC\EURONORM\" /D /E /R /H /C /K /Y
На втором компьютере
Код: Выделить весь код
Xcopy "C:\dvo32\*.*" "\\LOHN\Sicherung\Buchhaltung PC\Dvo32\" /D /E /R /H /C /K /Y 
Xcopy "C:\EURONORM\*.*" "\\LOHN\Sicherung\Buchhaltung PC\EURONORM\" /D /E /R /H /C /K /Y

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

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

Отправлено: 20:54, 28-10-2016 | #19

tyt tyt вне форума

Ветеран


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

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


Цитата megaloman:
Все проблемы - в нежелании почитать описание команды xcopy /?. Там всё написано. »
Теперь почитал, но пока еще темный лес

Отправлено: 21:43, 28-10-2016 | #20



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Прочее - как скопировать файлы из 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
CMD/BAT - [решено] Создать подкаталоги, и скопировать файлы из корневого каталога по подкаталогам. grinsen Скриптовые языки администрирования Windows 2 18-11-2010 13:48
Разное - [решено] Windows зависает при попытке скопировать файлы по сети 7human7 Microsoft Windows 7 0 05-10-2010 21:10




 
Переход