Войти

Показать полную графическую версию : [решено] Копирование\перемещение с сохранением структуры папок


xan08
18-12-2018, 13:58
Добрый день. Подскажите как реализовать следующий механизм. Есть база изображений со структурой \\сервер1\год\фио\месяц\день\папка_фото\фото.jpg .... например надо скопировать\переместить на \\сервер2\архив\год\фио\месяц\день\папка_фото\фото98.jpg Хотелось бы чтобы при копировании фото98.jpg в каталоге назначения \\сервер2\архив автоматически создавался путь "\год\фио\месяц\день\папка_фото\"

Elven
18-12-2018, 14:13
robocopy /?

megaloman
18-12-2018, 16:17
Есть база изображений со структурой \\сервер1\год\фио\месяц\день\папка_фото\фото.jpg »
Как имя расшаренного ресурса? \\сервер1\год (то есть, имеем много расшаренных папок для каждого года, например:
\\сервер1\2015 \\сервер1\2016 \\сервер1\2017 \\сервер1\2018
Или расшаренная папка одна, и там много папок с годами, то есть:
\\сервер1\расшаренная_папка\годы

xan08
19-12-2018, 02:52
Есть база изображений со структурой \\сервер1\год\фио\месяц\день\папка_фото\фото.jpg »
Как имя расшаренного ресурса? \\сервер1\год (то есть, имеем много расшаренных папок для каждого года, например:
\\сервер1\2015 \\сервер1\2016 \\сервер1\2017 \\сервер1\2018
Или расшаренная папка одна, и там много папок с годами, то есть:
\\сервер1\расшаренная_папка\годы

Расшаренная папка одна
сервер 1 \\klon\FOTO
сервер 2 \\hurma\archive


robocopy /? »


robocopy \\klon\FOTO\2015\Морозов\июнь\03 \\hurma\archive 39.jpg /MOV

Что нужно дописать чтобы в папке archive при копировании определенного файла создавался подкаталог FOTO\2015\Морозов\июнь\03? Не вижу таких ключей в robocopy /?

Нашел скрипт на powershell который делает так, но файлов порядка 10 тысяч и все с разными путями + маской *.jpg задать нельзя, т.к. требуется переместить определенные. Изначально планировалось копипастом закинуть все пути в BAT и выполнить с помощью robocopy
$src = 'C:\Temp'
$dst = 'D:\Foto'

foreach ($file in Get-ChildItem $src -File -Include *.jpg,*.txt -Recurse)
{
$folder = "$dst$(Split-Path $file.DirectoryName -NoQualifier)"

if (-not (Test-Path $folder)) {New-Item $folder -Force -ItemType Directory}
Copy-Item $file $folder -Force
}

megaloman
19-12-2018, 12:26
xan08, robocopy "\\Сервер1\Шара1\" "\\Сервер2\Шара2\" *.jpg /s /mov

xan08
19-12-2018, 14:14
xan08, robocopy "\\Сервер1\Шара1\" "\\Сервер2\Шара2\" *.jpg /s /mov »

Если из папки в папку, то проблемы нет...а вот на примере такой конструкции robocopy "\\klon\FOTO\2015\Морозов\июнь\03" "\\hurma\archive" 39.jpg /MOV можно ли сделать, чтобы в папке назначения автоматически создавалась структура FOTO\2015\Морозов\июнь\03.

megaloman
19-12-2018, 18:52
xan08, @Echo Off
cls
Set "Shr1=\\Сервер1\Шара1"
Set "Shr2=\\Сервер2\Шара2"
Set "Mask=*.jpg"

FOR /F "tokens=2 delims=\" %%i IN ("%Shr1%") DO Set "ShrDir=%%i"
RoboCopy "%Shr1%" "%Shr2%\%ShrDir%" "%Mask%" /S /Mov

Del /S /A "%Shr1%\desktop.ini" >NUL
For /F "usebackq delims=" %%i In (`Dir "%Shr1%\" /B /S /A:D 2^>nul^|Sort /R`) Do 2>nul RD "%%i"

Pause
Имеем "\\Сервер1\Шара1\" "\\Сервер2\Шара2\"
Переместим "\\Сервер1\Шара1\" --> "\\Сервер2\Шара2\Шара1\"
В красных строках удаляются файлы "\\Сервер1\Шара1\desktop.ini" и затем все пустые папки в "\\Сервер1\Шара1\", если они есть. Решайте сами, оно Вам нужно ?
Если надо конкретный файл, то, например, указать Set "Mask=39.jpg"




© OSzone.net 2001-2012