PowerShell - Копирование файла с полной структурой директорий

Аватара пользователя
Uragan66

PowerShell - Копирование файла с полной структурой директорий

Сообщение Uragan66 »

Доброго времени суток всем!

Никак не получается копирование файла с полной структурой папок. Вроде и не сложный вопрос, но перепробовал и Xcopy, Robocopy и просто Copy-Item, файл копируется без папок.

Собственно, к примеру, есть путь:



Код:

Код: Выделить всё

C:\papka\papka1\papka2\README.txt

Нужно скопировать файл README.txt на другой раздел, к примеру D, чтобы сохранилась вся структура, включая корневую директорию.

В директории papka2 могут быть и другие файлы и папки, но нужно скопировать только файл README.txt

В итоге на диске D должна получится такая структура:



Код:

Код: Выделить всё

papka
  papka1
    papka2
      README.txt

Буду премного благодарен за советы и подсказки.
Аватара пользователя
Iska

Re: PowerShell - Копирование файла с полной структурой директорий

Сообщение Iska »

Ну, например, так:



Код:

Код: Выделить всё

$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
Аватара пользователя
Uragan66

Re: PowerShell - Копирование файла с полной структурой директорий

Сообщение Uragan66 »

Код:

Код: Выделить всё

param(
    $path  = "C:\papka\papka1\papka2\README.txt",
    $drive = "D"
)cls
Copy $path (NI -F($drive+$path.Remove(0,1))) 
Аватара пользователя
Fors1k

Re: PowerShell - Копирование файла с полной структурой директорий

Сообщение Fors1k »

Код:

Код: Выделить всё

param(
    $path  = "C:\papka\papka1\papka2\README.txt",
    $drive = "D"
)cls
Copy $path (NI -F($drive+$path.Remove(0,1))) 
Аватара пользователя
Uragan66

Re: PowerShell - Копирование файла с полной структурой директорий

Сообщение Uragan66 »

Цитата Uragan66:



А что нужно добавить, чтобы копирование шло в определённую папку, например, J:\RESERV\ttv ?
PowerShell - Копирование файла с полной структурой директорий




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)))
Аватара пользователя
Uragan66

Re: PowerShell - Копирование файла с полной структурой директорий

Сообщение Uragan66 »

Цитата Iska:



т.е., из «C:\papka\papka1\papka2\README.txt» получался бы «J:\RESERV\ttv\papka\papka1\papka2\README.txt»?
PowerShell - Копирование файла с полной структурой директорий




да


Цитата Iska:



Попробуйте так (не проверялось):
PowerShell - Копирование файла с полной структурой директорий




так не хочет, копируется в корень диска

По второму коду отлично

Спасибо!
Аватара пользователя
Uragan66

Re: PowerShell - Копирование файла с полной структурой директорий

Сообщение Uragan66 »

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

Re: PowerShell - Копирование файла с полной структурой директорий

Сообщение greg zakharov »

Цитата greg zakharov:



для чего нужен копирование папки на другой раздел
PowerShell - Копирование файла с полной структурой директорий




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

Можно было бы конечно просто бекапы файлов делать, но папка плеера и так немаленькая... Лучше уж их на другой диск скопировать. Ну и структура папок важна, дабы потом не путаться.
Аватара пользователя
greg zakharov

Re: PowerShell - Копирование файла с полной структурой директорий

Сообщение greg zakharov »

Цитата Uragan66:



...Но не всегда патчи удачны и приходится потом всё назад возвращать.

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



Всё равно непонятно для чего нагружать винт ненужным копированием, когда есть SCM. Или у вас SSD? Но и тогда какой смысл "размазывать" данные по накопителю? Берёте какую-нибудь SCM, скажем, git, переходите в корневую папку:



Код:

Код: Выделить всё

git init
git add -a
git commit -am "контрольная точка с описанием"

А когда понадобится вернуться к одному из ранних состояний, просто делаете откат на нужную контрольную точку. А если еще папка синхронизирована с облаком, то тогда вообще всё шоколадно. Если не хочется заморачиваться с git, можно обойтись fossil - благо один единственный бинарник.
Аватара пользователя
greg zakharov

Re: PowerShell - Копирование файла с полной структурой директорий

Сообщение greg zakharov »

Цитата Uragan66:



так не хочет, копируется в корень диска
PowerShell - Копирование файла с полной структурой директорий




А… Семён Семёныч… Там и первый код по факту работал некорректно.



Попробуйте так:



Скрытый текст

[spoiler]Код:
[/spoiler]

Код: Выделить всё

$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
Ответить

Вернуться в «Скриптовые языки администрирования Windows»