Мое любимое - использовать класс .Net [IO.DirectoryInfo], который позаботится о некоторой логике. Я действительно использую это для множества подобных задач сценариев. Он имеет метод .Create(), который создает каталоги, которые не существуют, без ошибок, если они это делают.
Поскольку это еще проблема с двумя шагами, я использую псевдоним foreach, чтобы сохранить его простым. Для отдельных файлов:
[IO.DirectoryInfo]$to |% {$_.create(); cp $from $_}
Насколько многостраничный матча файла/каталога, я хотел бы использовать RoboCopy над хсором. Удалите «*» из вашего от и просто использовать:
RoboCopy.exe $from $to *
Вы все еще можете добавить/г (Recurse),/е (Recurse включая порожние), и 50 других полезных переключателей.
Редактировать: Оглядываясь на это, оно является кратким, но не очень читаемым, если вы часто не используете код.Обычно у меня есть она разделилась на две части, например, так:
([IO.DirectoryInfo]$to).Create()
cp $from $to
Кроме того, DirectoryInfo является тип материнской собственности FileInfo, так что если вы $ в это файл, вы можете использовать их вместе:
([IO.FileInfo]$to).Parent.Create()
cp $from $to
PowerShell настолько легко, когда один знает :) – stej
это работает для целых каталогов, но что, если я просто копирование отдельных файлов (так что я могу иметь ул на нас)? Как скопировать файл c: \ test1 \ file.txt в c: \ test2 \ file.txt, когда c: \ test2 не существует? Это то, что мне действительно нужно знать, как это сделать. Спасибо, Gary –
Я столкнулся с этой проблемой и решил ее, сначала позвонив по New-Item: 'New-Item -Force $ to' ' Copy-Item -Force $ from $ to' – rjschnorenberg