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

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

Ответить
Настройки темы
PowerShell - Копирование файла с полной структурой директорий

Старожил


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

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


Доброго времени суток всем!
Никак не получается копирование файла с полной структурой папок. Вроде и не сложный вопрос, но перепробовал и Xcopy, Robocopy и просто Copy-Item, файл копируется без папок.
Собственно, к примеру, есть путь:
Код: Выделить весь код
C:\papka\papka1\papka2\README.txt
Нужно скопировать файл README.txt на другой раздел, к примеру D, чтобы сохранилась вся структура, включая корневую директорию.
В директории papka2 могут быть и другие файлы и папки, но нужно скопировать только файл README.txt
В итоге на диске D должна получится такая структура:
Код: Выделить весь код
papka
  papka1
    papka2
      README.txt
Буду премного благодарен за советы и подсказки.

Отправлено: 15:57, 16-01-2021

 

Ветеран


Contributor


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

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


Ну, например, так:
Код: Выделить весь код
$sSourceFile = 'C:\papka\papka1\papka2\README.txt'

$sDestPath = [System.IO.Path]::Combine('D:', (Split-Path -Path ([System.IO.Path]::GetDirectoryName($sSourceFile)) -NoQualifier))

New-Item -Path $sDestPath -ItemType Directory -Force | Out-Null
Copy-Item -Path $sSourceFile -Destination $sDestPath
Это сообщение посчитали полезным следующие участники:

Отправлено: 17:00, 16-01-2021 | #2



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

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


Аватара для Fors1k

Старожил


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

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


Код: Выделить весь код
param(
    $path  = "C:\papka\papka1\papka2\README.txt",
    $drive = "D"
)cls

Copy $path (NI -F($drive+$path.Remove(0,1))) 
Это сообщение посчитали полезным следующие участники:

Отправлено: 17:42, 16-01-2021 | #3


Старожил


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

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


Iska, Fors1k, спасибо большое! Оба скрипта работают при копировании в корень диска. А что нужно добавить, чтобы копирование шло в определённую папку, например, J:\RESERV\ttv ?

Отправлено: 19:04, 16-01-2021 | #4


Ветеран


Contributor


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

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


Цитата Uragan66:
А что нужно добавить, чтобы копирование шло в определённую папку, например, J:\RESERV\ttv ? »
Uragan66, т.е., из «C:\papka\papka1\papka2\README.txt» получался бы «J:\RESERV\ttv\papka\papka1\papka2\README.txt»?

Попробуйте так (не проверялось):
Код: Выделить весь код
$sDestPath = [System.IO.Path]::Combine('J:\RESERV\ttv', (Split-Path -Path ([System.IO.Path]::GetDirectoryName($sSourceFile)) -NoQualifier))
В коде коллеги Fors1k тоже просто подставить искомое и чуть изменить код:
Код: Выделить весь код
    $drive = "J:\RESERV\ttv"
…
Copy $path (NI -F($drive+$path.Remove(0,2)))
Это сообщение посчитали полезным следующие участники:

Отправлено: 19:16, 16-01-2021 | #5


Старожил


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

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


Цитата Iska:
т.е., из «C:\papka\papka1\papka2\README.txt» получался бы «J:\RESERV\ttv\papka\papka1\papka2\README.txt»? »
да
Цитата Iska:
Попробуйте так (не проверялось): »
так не хочет, копируется в корень диска
По второму коду отлично
Спасибо!

Отправлено: 19:39, 16-01-2021 | #6


Ветеран


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

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


А позвольте полюбопытствовать для чего необходимо копирование папки на другой раздел? Может просто обойтись созданием символической ссылки?

Последний раз редактировалось greg zakharov, 16-01-2021 в 22:56.


Отправлено: 20:21, 16-01-2021 | #7


Старожил


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

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


Цитата greg zakharov:
для чего нужен копирование папки на другой раздел »
если немного подробнее, то копирование нужно перед заменой файлов в плеере SimpleTV. Периодически для него появляются патчи или просто требуется замена его скриптов. Но не всегда патчи удачны и приходится потом всё назад возвращать.
Можно было бы конечно просто бекапы файлов делать, но папка плеера и так немаленькая... Лучше уж их на другой диск скопировать. Ну и структура папок важна, дабы потом не путаться.

Отправлено: 21:10, 16-01-2021 | #8


Ветеран


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

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


Цитата Uragan66:
...Но не всегда патчи удачны и приходится потом всё назад возвращать.
Можно было бы конечно просто бекапы файлов делать, но папка плеера и так немаленькая...
Всё равно непонятно для чего нагружать винт ненужным копированием, когда есть SCM. Или у вас SSD? Но и тогда какой смысл "размазывать" данные по накопителю? Берёте какую-нибудь SCM, скажем, git, переходите в корневую папку:
Код: Выделить весь код
git init
git add -a
git commit -am "контрольная точка с описанием"
А когда понадобится вернуться к одному из ранних состояний, просто делаете откат на нужную контрольную точку. А если еще папка синхронизирована с облаком, то тогда вообще всё шоколадно. Если не хочется заморачиваться с git, можно обойтись fossil - благо один единственный бинарник.
Это сообщение посчитали полезным следующие участники:

Отправлено: 22:55, 16-01-2021 | #9


Ветеран


Contributor


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

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


Цитата Uragan66:
так не хочет, копируется в корень диска »
А… Семён Семёныч… Там и первый код по факту работал некорректно.

Попробуйте так:
Скрытый текст
Код: Выделить весь код
$sSourceFile = 'C:\papka\papka1\papka2\README.txt'

$sDestPath = Join-Path -Path 'J:\RESERV\ttv' -ChildPath (Split-Path -Path ([System.IO.Path]::GetDirectoryName($sSourceFile)) -NoQualifier)

New-Item -Path $sDestPath -ItemType Directory -Force | Out-Null
Copy-Item -Path $sSourceFile -Destination $sDestPath
Это сообщение посчитали полезным следующие участники:

Отправлено: 08:51, 17-01-2021 | #10



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Копирование папок с файлами с сохранением директорий по маскам buntr Скриптовые языки администрирования Windows 19 22-06-2018 07:03
PowerShell - [решено] Изменение xml файла со сложной многоуровневой структурой Bolshoi Скриптовые языки администрирования Windows 3 17-01-2018 10:58
CMD/BAT - Копирование со структурой westovich Скриптовые языки администрирования Windows 6 09-06-2016 08:34
CMD/BAT - [решено] Копирование файлов из переменных директорий Сантей Скриптовые языки администрирования Windows 9 25-06-2014 14:57
Автоматический запуск пакетного файла после полной загрузки ОС ChVL Автоматическая установка Windows 2000/XP/2003 8 11-05-2007 00:16




 
Переход