Как правильно использовать командлет Copy-Item для копирования файлов по конвейеру
Я F:\tempzip
небольшой скрипт, который должен копировать все файлы .zip
в специальную папку с именем F:\tempzip
.
Я попытался сделать это с помощью командлета Copy-Item, но мне не удалось это сделать. Скрипт должен скопировать все файлы из этой папки (рекурсивно), которые являются ".zip".
Это та часть сценария, о которой я говорю:
get-childitem F:\Work\xxx\xxx\xxx -recurse '
| where {$_.extension -eq ".zip"} '
| copy-item F:\tempzip
Что я должен добавить?
Ответы
Ответ 1
Когда элементы трубопровода на copy-item
, вам нужно сказать, что "F:\tempzip"
- путь назначения.
| Copy-Item -Destination F:\tempzip
Вы также можете вырезать трубопровод для оператора where
с помощью параметра Get-ChildItem
-filter
.
Get-Childitem "C:\imscript" -recurse -filter "*.zip" | Copy-Item -Destination "F:\tempzip"
Изменить: удаление ненужного цикла foreach
и обновленное объяснение.
Ответ 2
Это намного проще. Копировать-элемент имеет свой собственный переключатель -Recurse. Все, что вам нужно сделать, это:
Copy-Item F:\Work\xxx\xxx\xxx\*.zip F:\tempzip -Recurse
Ответ 3
По какой-то причине рекурсия "Копировать-элемент" не выполнила то, что я хотел, как упоминалось здесь, и как она документирована для работы. Если у вас есть куча файлов *.zip или *.jpg в произвольно глубоких иерархиях подпапок, и вы хотите скопировать их в одно место (одна плоская папка, в другом месте), мне повезло с помощью команды piped с участием Get-ChildItem, Предположим, что вы находитесь в папке, содержащей корень вашего поиска:
Get-ChildItem -Recurse -Include *.zip | Copy-Item -Destination C:\Someplace\Else
Эта команда скопирует все файлы и не дублирует иерархии папок.