![]() |
Скопировать файлы из папок по определенному названию
Здравствуйте!
Можете подсказать, как реализовать следующее: Есть папка С:\Nodes, в ней одна или несколько папок такого формата - RU.*.* Нужно пройтись по каждой такой папке и внутри из папки Config скопировать файлы config.xml. И разложить эти файлы так: на С:\backup, здесь для каждого файла создавать папку с тем же названием RU.*.* (то есть название папки такое же, как то откуда мы его взяли). Надеюсь, всё понятно написано) Заранее благодарю за помощь. |
Код:
xcopy /yes "С:\Nodes" "С:\backup" Код:
@echo off |
Код:
@Echo Off |
alpap, ошибка: Синтаксическая ошибка в имени файла, имени папки или метке тома.
|
megaloman, спасибо, всё работает. А не могли бы Вы пояснить, какой параметр за что отвечает, я новичок в этом деле.
Просто мне еще нужно по аналогии запрограммировать обратную операцию - восстановление. Хотелось бы разобраться. Кроме этого нарисовались еще условия: для каждого запуска скрипта записывать всё в отдельный лог-файл. И еще: при каждом запуске скрипта на С:\backup будет создаваться папка с названием - текущая дата и время, а в нее уже будут писаться папки Ru.*.* . С этим разобралась. Соответственно при восстановлении (другой скрипт) пользователю должен вывестись список всех таких папок, пользователь должен выбрать ту, которая ему нужна, и далее уже восстановление файлов Config.xml Жду посильной помощи) Спасибо! |
JKop, Пользователь входит в систему под своим уникальным именем? Мне не нравится идея выбора пользователем имени папки при восстановлении.
|
megaloman, нет, не под уникальным. А чем не нравится?
|
JKop, Я не очень представляю как сделать красиво и надёжно выбор. И выбор пользователем - это всегда путь к конфликту из-за возможного неверного выбора. Да еще Вы хотите иметь файлы за разные даты и время. Вот решение с организацией папок по дате-времени и ведением лог-файла.
Код:
@Echo Off |
megaloman, не пойму, запускаю скрипт, ничего не происходит. Почему в коде появился диск Z: - поменяла на С:
|
JKop, Виноват! У меня для отладки существует диск Z: , а Вам надо C:. Я в спешке выпустил это из виду. Плюс еще допустил погрешности. Я исправил скрипт, возьмите именно его, испытайте.
|
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 |
Я не читатель, я писатель :), поэтому в Вашем коде не сильно копался. Как я понял, Вы выбираете бэкап за определённую дату-время и восстанавливаете все конфиги, которые там есть.
Попробуйте
Код:
@Echo Off Чтобы не было зюкочек в диалогах и сообщениях - сохраните батник в 866 кодировке. Повторюсь, мне всё это не нравится, при нескольких пользователях такие неконтролируемые возможности приведут к конфликтам. |
megaloman,
Не могли бы и мне помочь создать батник для запуска копирования(когда нужно-дамы запустят). Нужно копировать измененные файлы из папки C:\Dvo\Bu в домашней сети на \\USB\Dvo\Bu (написал USB так как не помню название съемного носителя)это для одного компьютера и для другого из C:\Dvo\St в \\USB\Dvo\St |
Цитата:
Если это и в самом деле сетевые пути, то батник из одной строки: Код:
xcopy "С:\Dvo\Bu\*.*" "\\USB\Dvo\Bu\" /E /D /Y А еще лучше без батника: создать значок на xcopy и добавить туда параметры. |
megaloman,
Это я со своего взял-у меня в сети есть ресивер \\VUDUO2\Harddisk А у них к одному подключен жесткий диск через USB и второй компьютер его видит через сеть. Я в понедельник посмотрю точный путь |
megaloman, спасибо, всё работает)
Тоже взялась за копирование файлов на другой сервер в домене. Делаю по вашему примеру: Цитата:
Но папка с файлами не копируется, "Неправильно указан диск". Что может быть не так? Папка Test в общем доступе. |
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,
Затянулось у меня аж до пятницы. Вот исходные данные На первом компьютере нужно копировать все измененные и новые файлы и папки с 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 |
Цитата:
На первом компьютере нужно копировать все измененные и новые файлы и папки
Код:
Xcopy "C:\dvo32\*.*" "E:\Lohnverrechnungs PC\Dvo32\" /D /E /R /H /C /K /Y На втором компьютере
Код:
Xcopy "C:\dvo32\*.*" "\\LOHN\Sicherung\Buchhaltung PC\Dvo32\" /D /E /R /H /C /K /Y |
Цитата:
|
Время: 06:25. |
Время: 06:25.
© OSzone.net 2001-