Переместить файлы старше n дней powershell

Обновлено: 05.07.2024

Просмотр содержимого дисков Windows PowerShell и управление хранящимися на них элементами аналогично управлению файлами и папками на физических дисках Windows. В этой статье описывается выполнение конкретных задач по управлению файлами и папками с помощью PowerShell.

Получение списка файлов и папок, содержащихся в папке

Извлечь все элементы непосредственно из папки можно с помощью командлета Get-ChildItem . Для отображения скрытых и системных элементов добавьте необязательный параметр Force. Например, эта команда отображает непосредственное содержимое диска C Windows PowerShell (которое совпадает с содержимым физического диска C Windows):

Эта команда выводит только элементы, содержащиеся на диске непосредственно, так же как и команда DIR оболочки Cmd.exe или команда ls оболочки UNIX. Для показа вложенных элементов необходимо также указать параметр -Recurse . (Время выполнения этой операции будет очень велико.) Для вывода всего содержимого диска C введите:

Командлет Get-ChildItem позволяет отфильтровать элементы с помощью параметров Path, Filter, Include и Exclude, но обычно осуществляется лишь фильтрация по имени. Сложную фильтрацию на основе других свойств элементов можно выполнить с помощью Where-Object .

Следующая команда находит все исполняемые файлы в папке Program Files, которые были в последний раз изменены после 1 октября 2005 г. и размер которых не менее одного мегабайта и не более десяти мегабайт:

Копирование файлов и папок

Копирование выполняется с помощью командлета Copy-Item . Следующая команда создает резервную копию C:\boot.ini в C:\boot.bak:

Если целевой файл уже существует, то попытка копирования завершается неудачей. Чтобы перезаписать имеющийся целевой файл, используйте параметр Force.

Эта команда работает, даже если целевой объект доступен только для чтения.

Так же выполняется и копирование папок. Эта команда копирует папку C:\temp\test1 в новую папку C:\temp\DeleteMe рекурсивно.

Можно также скопировать избранные элементы. Следующая команда копирует все файлы TXT, содержащиеся в папке C:\data , в папку C:\temp\text :

Для копирования элементов файловой системы можно использовать и другие средства. В Windows PowerShell по-прежнему работают команды XCOPY, ROBOCOPY и такие COM-объекты, как Scripting.FileSystemObject. Например, можно воспользоваться COM-классом Scripting.FileSystem сервера сценариев Windows для создания резервной копии файла C:\boot.ini в файле C:\boot.bak :

Создание файлов и папок

Создание новых элементов осуществляется одинаковым образом всеми поставщиками Windows PowerShell. Если поставщик Windows PowerShell поддерживает более одного типа элементов (например, поставщик Windows PowerShell FileSystem различает каталоги и файлы), необходимо указать тип элемента.

Эта команда создает папку C:\temp\New Folder :

Эта команда создает пустой файл C:\temp\New Folder\file.txt .

При использовании параметра Force с командой New-Item для создания папки, которая уже существует, она не перезапишет и не заменит папку. Будет просто возвращен имеющийся объект папки. Однако, если использовать New-Item -Force в уже имеющимся файле, файл будет полностью перезаписан.

Удаление всех файлов и папок, содержащихся в папке

Удалить вложенные элементы можно с помощью командлета Remove-Item , однако он потребует подтверждения удаления, если элемент сам что-нибудь содержит. Например, при попытке удаления папки C:\temp\DeleteMe , которая содержит другие элементы, Windows PowerShell предварительно предложит подтвердить удаление этой папки:

Если подтверждение для каждого вложенного элемента нежелательно, задайте параметр Recurse:

Подключение локальной папки как диска

Отобразить локальную папку можно с помощью команды New-PSDrive . Следующая команда создает локальный диск P: , корневым каталогом которого является локальный каталог Program Files, отображающийся только в сеансе PowerShell:

Как и при использовании сетевых дисков, диски, отображенные в Windows PowerShell, немедленно становятся доступными оболочке Windows PowerShell. Чтобы создать подключенный диск, отображающийся в проводнике, нужен параметр -Persist . Но с этим параметром можно использовать только удаленные пути.

Чтение текстового файла в массив

Одним из наиболее общих форматов хранения текстовых данных является файл, отдельные строки которого рассматриваются как отдельные элементы. Командлет Get-Content используется для чтения всего файла за один шаг, как показано далее:

Командлет Get-Content сразу рассматривает данные, считанные из файла, как массив с одним элементом на строку содержимого файла. Убедиться в этом можно, проверив свойство Length полученного содержимого:

Эта команда наиболее полезна для непосредственного ввода в Windows PowerShell информационных списков. Например, можно хранить в файле C:\temp\domainMembers.txt список имен компьютеров или IP-адресов по одному имени на каждую строку файла. Вы можете использовать командлет Get-Content , чтобы извлечь содержимое файла и поместить его в переменную $Computers :

Теперь переменная $Computers представляет собой массив, содержащий в каждом элементе имя компьютера.

Перемещает элемент из одного местоположения в другое.

Синтаксис

Описание

Командлет Move-Item cmdlet перемещает элемент, включая его свойства, содержимое и дочерние элементы, из одного местоположения в другое. Оба заданных местоположения должны поддерживаться одним и тем же поставщиком. Например, можно переместить файл или вложенный каталог из одного каталога в другой либо переместить подраздел реестра из одного раздела в другой. При перемещении элемента он удаляется в исходном местоположении и создается в новом.

Параметры

-Credential <PSCredential>

Задает учетную запись пользователя, который располагает разрешением для выполнения этого действия. По умолчанию используется значение "Текущий пользователь".

Введите имя пользователя, например "User01" или "Domain01\User01", или введите объект PSCredential, например объект, создаваемый командлетом Get-Credential. При вводе имени пользователя система запросит пароль.

Этот параметр не поддерживается ни одним из установленных с Windows PowerShell поставщиком.

Значение по умолчанию

Принимать входные данные из конвейера?

Принимать подстановочные знаки?

-Destination <string>

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

Чтобы переименовать перемещаемый элемент, задайте новое имя в параметре Destination.

Значение по умолчанию

Принимать входные данные из конвейера?

Принимать подстановочные знаки?

-Exclude <string[]>

Исключает указанные элементы. Значение этого параметра определяет значение параметра Path. Введите элемент пути или шаблон, например "*.txt". Подстановочные знаки разрешены.

Значение по умолчанию

Принимать входные данные из конвейера?

Принимать подстановочные знаки?

-Filter <string>

Задает фильтр с использованием формата или языка поставщика. Значение этого параметра определяет значение параметра Path. Синтаксис фильтра, в том числе использование подстановочных знаков, зависит от поставщика. Фильтры эффективнее других параметров, потому что поставщик применяет их при извлечении объектов (вместо использования Windows PowerShell для фильтрации извлеченных объектов).

Значение по умолчанию

Принимать входные данные из конвейера?

Принимать подстановочные знаки?

-Force

Позволяет командлету переместить элемент, заменяющий существующий элемент, доступный только для чтения. Реализация варьируется от поставщика к поставщику. Дополнительные сведения см. в разделе About_Providers. Даже при использовании параметра Force командлет не может переопределить ограничения безопасности.

Значение по умолчанию

Принимать входные данные из конвейера?

Принимать подстановочные знаки?

-Include <string[]>

Перемещает только указанные элементы. Значение этого параметра определяет значение параметра Path. Введите элемент пути или шаблон, например "*.txt". Подстановочные знаки разрешены.

Значение по умолчанию

Принимать входные данные из конвейера?

Принимать подстановочные знаки?

-LiteralPath <string[]>

Задает путь к текущему местоположению элементов. В отличие от значения параметра Path, значение параметра LiteralPath используется точно в том виде, в котором оно введено. Никакие символы не интерпретируются как подстановочные знаки. Если путь включает escape-символы, его нужно заключить в одиночные кавычки. Одиночные кавычки указывают оболочке Windows PowerShell, что никакие символы не следует интерпретировать как escape-символы.

Значение по умолчанию

Принимать входные данные из конвейера?

Принимать подстановочные знаки?

-PassThru

Передает по конвейеру объект, представляющий элемент. По умолчанию этот командлет не формирует никаких выходных данных.

Значение по умолчанию

Принимать входные данные из конвейера?

Принимать подстановочные знаки?

-Path <string[]>

Задает путь к текущему местоположению элементов. По умолчанию используется текущий каталог. Подстановочные знаки разрешены.

Значение по умолчанию

Принимать входные данные из конвейера?

true (ByValue, ByPropertyName)

Принимать подстановочные знаки?

-Confirm

Запрашивает подтверждение перед выполнением команды.

Значение по умолчанию

Принимать входные данные из конвейера?

Принимать подстановочные знаки?

-WhatIf

Описывает, что произойдет при выполнении команды, без ее фактического выполнения.

Значение по умолчанию

Принимать входные данные из конвейера?

Принимать подстановочные знаки?

-UseTransaction

Включает команду в активную транзакцию. Этот параметр допустим, только если транзакция выполняется. Дополнительные сведения см. в разделе about_Transactions.

Значение по умолчанию

Принимать входные данные из конвейера?

Принимать подстановочные знаки?

<CommonParameters>

Данный командлет поддерживает общие параметры -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer и -OutVariable. Дополнительные сведения см. в разделе about_Commonparameters.

Ввод и вывод

Строку, содержащую путь, можно передать командлету Move-Item по конвейеру.

Нет или объект, представляющий перемещенный элемент.

При использовании параметра Passthru командлет Move-Item создает объект, представляющий перемещенный элемент. В противном случае этот командлет не формирует никаких выходных данных.

Примечания

Командлет Move-Item перемещает файлы между дисками, которые поддерживаются одним поставщиком, однако каталоги могут быть перемещены только в пределах одного диска.

Так как командлет Move-Item перемещает свойства, содержимое и дочерние элементы объекта, то все выполняемые перемещения являются рекурсивными по умолчанию.

Командлет Move-Item также можно вызывать с помощью псевдонимов: "move", "mv" и "mi". Дополнительные сведения см. в разделе About_Aliases.

Командлет Move-Item предназначен для работы с данными, предоставляемыми любым поставщиком. Чтобы получить список поставщиков, доступных в текущем сеансе, введите команду "Get-PsProvider". Дополнительные сведения см. в разделе About_Providers.

Windows 10 имеет встроенные функции для освобождения места путем удаления старых файлов в %temp% каталог и Downloads папки. В настройках Windows 10 есть опция («Хранилище»), которая автоматически удаляет временные файлы, которые не используются вашими приложениями, файлы в загрузках, которые не были изменены в течение последних x дней, или файлы, хранящиеся в корзине в течение x дней.

Параметры очистки настроек хранилища Windows 10

Кроме того, инструмент очистки диска очищает файлы в %temp% каталог, к которому не обращались в течение последних 7 дней.

Однако параметры очистки диска и хранилища предназначены только для %temp% а также Downloads папки. Чтобы удалить файлы, которые старше определенного количества дней, в «пользовательской» папке, например Documents папку, вам нужно использовать один из этих трех методов:

Как автоматически удалять файлы старше N дней в Windows

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

Способ 1. Удалите файлы старше «N» дней с помощью проводника

Используя Windows Search, вы можете легко получить список файлов на основе выбранного диапазона дат или файлов старше определенной даты.

Важный: По умолчанию Windows выполняет поиск файлов в текущей папке и во всех подпапках. Чтобы ограничить поиски только текущая папка, нажмите кнопку «Текущая папка» на панели инструментов поиска / на ленте.

Расширенный поиск Запрос: «Дата» Операторы

Если предустановленный диапазон дат вам не подходит, вы можете ввести собственный поисковый запрос. В поле поиска введите следующее, чтобы отфильтровать файлы из настраиваемого диапазона дат:

Это находит файлы, которые были изменены в течение указанного диапазона дат. Вы также можете использовать datecreated: dateaccessed: или date: (особенно для изображений с камеры) операторов. Обратите внимание, что date: Оператор использует метаданные даты (EXIF), записанные камерой.

СВЯЗАННЫЙ: Как искать файлы, созданные между двумя датами в Windows

Чтобы найти файлы, которые не были изменены после 1 ноября 2017 года, используйте меньше чем ( ) символ с datemodifed: оператор, как показано ниже:

удалить файлы старше чем х дней в Windows

Выберите файлы из списка и удалите их.

Чаевые: Вместо того, чтобы вводить диапазон дат вручную, введите datemodified: или datecreated: или dateaccessed: или date: оператор в поле поиска, и пусть File Explorer покажет вам выбор даты. Затем вы можете выбрать дату или диапазон дат из всплывающего окна. Чтобы указать диапазон дат, выберите первую дату и перетащите курсор в соответствующее поле.

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

Способ 2: удаление файлов старше, чем N дней с использованием командной строки

ForFiles Консольный инструмент (в Windows 7, Windows 8, Windows 8.1 и Windows 10) выбирает файл или набор файлов и выполняет команду для этого файла или набора файлов.

Чтобы просмотреть весь список аргументов командной строки, поддерживаемых этим инструментом, введите FORFILES /? в командной строке.

Чтобы найти и удалить файлы старше определенного количества дней, используя ForFiles, откройте окно командной строки и введите одну из следующих команд:

удалить файлы старше x дней в Windows forfiles.exe команда forfiles

Выше предполагается, что путь к папке D:\My Scripts и вы хотите удалить файлы старше 30 дней. Настройте путь к папке и количество дней в соответствии с вашими потребностями.

Дополнительный совет: Чтобы выполнить пробный прогон перед попыткой удаления файлов, чтобы проверить, какие файлы подвержены указанным критериям, замените команду del с echo , как показано ниже:

forfiles удалить старые файлы x days echo

При желании вы можете создать командный файл с помощью приведенной выше команды. Или для автоматического запуска команды с заданными интервалами с помощью планировщика заданий.

Запустите команду автоматически с помощью планировщика заданий

  1. Запустите планировщик задач.
  2. В планировщике заданий нажмите «Библиотека планировщика заданий»
  3. Нажмите ссылку «Создать задачу» на правой панели.
  4. В диалоговом окне «Создать задачу» выберите вкладку «Общие».
  5. Упомяните название задачи, скажем «Удалить старые файлы в Моих документах»
  6. Перейдите на вкладку «Триггеры» и нажмите «Создать».
  7. Выберите «По расписанию» в раскрывающемся списке под раскрывающимся списком «Начать задачу».
  8. Вы можете запускать задачу ежедневно, еженедельно или ежемесячно. Если вы выбираете еженедельно, выберите дни недели, когда вы хотите запускать задачу.
  9. После этого нажмите кнопку ОК.
  10. Перейдите на вкладку «Действия» и нажмите кнопку «Создать…».
  11. В окне «Новое действие» заполните следующее:

удалить файлы старше x дней в планировщике задач Windows

Создается новая задача, которая при запуске удаляет файлы в вашем Documents папка, которая не была изменена за последние 30 дней.

Способ 3: удалить файлы старше N дней с помощью скрипта

Пользователи форума Spiceworks имеют VBScripts, которые могут рекурсивно удалять файлы старше N дней по указанному пути к папке. Вот простой скрипт:

Источник: Удалить старые файлы и пустые подпапки - Центр сценариев - Spiceworks

ВАЖНЫЙ!Приведенный выше скрипт учитывает свойство «Дата создания» элементов вместо «Дата последнего изменения». Если вы хотите удалить файлы, которые не были модифицированный за последние N дней измените следующую строку в скрипте:

Он очищает файлы старше 3 дней. Все, что вам нужно сделать, это изменить путь к папке Максимальные параметры возраста файла, как требуется в сценарии, сохраните его с .vbs расширение и запустить его. Обратите внимание, что скрипт работает с указанными папками и подпапками рекурсивно.

Вот еще один скрипт, который удаляет файлы старше N дней и автоматически рекурсивно очищает пустые подпапки. См. Удаление файлов старше максимального возраста (в днях) - Центр сценариев - Spiceworks

СВЯЗАННЫЙ: Как быстро находить и удалять пустые папки в Windows

Способ 4: удаление файлов старше n дней с помощью PowerShell

Третий вариант - использовать PowerShell, который имеет полезный командлет для поиска и удаления старых файлов.

Запустить PowerShell ( powershell.exe) и введите следующую команду:

Использовать пути, содержащие переменную окружения, например %userprofile%\documents используйте синтаксис ниже:

(Заметка: Имя папки в примере соответствует вашему профилю пользователя. Documents папки. Измените имя и путь к папке соответственно вашим потребностям.)

Так как мы использовали -File параметр, он работает только для файлов. Таким образом, папки, которые не были записаны за последние n дней, не могут быть удалены.

Указанная команда состоит из трех частей:

  1. Get-ChildItem Командлет получает список файлов в папке «Документы».
  2. Затем вывод передается в Where-Object Командлет, чтобы выполнить фильтрацию, выбирая только файлы, которые не были изменены в последнем x количество дней (в этом примере 30 days ).
  3. Наконец, мы передаем вывод в Remove-Item командлет, который, в свою очередь, удаляет те старые файлы, которые были возвращены предыдущими двумя командлетами.

Совет 1: список подходящих файлов, не удаляете их?

Чтобы вывести список подходящих файлов и папок, не удаляя их, | Remove-Item переключатель.

Совет 2: подавление ошибок при удалении элементов

Удалить старые файлы, а также папки

Обратите внимание, что приведенные выше команды удаляют только старые файлы, но не подпапки, которые не были записаны в последнем x дней. Чтобы удалить старые папки, бросьте -File аргумент в из ранее объясненных команд.

Пример:

(См. Документацию по командлетам Get-ChildItem на сайте Microsoft)

Важный: -Recurse параметр указывает PowerShell рекурсивно получать файлы (в подкаталогах). Чтобы предотвратить поиск файлов в подпапках, удалите -Recurse опция, так что обрабатывается только текущая папка.

date

13.05.2020

directory

PowerShell

comments

комментариев 6

PowerShell командлет Copy-Item используется для копирования файлов между локальными, сетевыми каталогами или между компьютерами по сети через WinRM. Командлет Copy-Item предоставляет большое количество опций, которые можно использовать в разных сценариях копирования файлов и каталогов (по своим возможностям этот командлет почти не уступает утилите robocopy). Например:

  • перезапись файлов (override)
  • фильтрация по имени/шаблону
  • исключение по имени/шаблону
  • Verbose режим
  • Копирование файлов с/на удаленные компьютеры

Начнем с простых примеров использования Copy-Item и будем переходить к более сложным.

Копирование файлов и каталогов

Чтобы скопировать один файл 1.txt из каталога C:\SourceFolder\ в F:\DestFolder\, выполните:

Copy-Item -Path "C:\SourceFolder\1.txt" -Destination "F:\DestFolder\1.txt"

Можно использовать сокращенный синтаксис командлета, пропустив указание параметров Path и Destination:

cpi "C:\SourceFolder\1.txt" "F:\DestFolder\1.txt"

Теперь скопируем каталог C:\SourceFolder\folder в F:\DestFolder\folder. В папке folder находится файл 1.txt. Обратите внимание что без ключа –Recurse, папка folder копируется без содержимого:

Copy-Item -Path "C:\SourceFolder\folder" -Destination "F:\DestFolder\folder" -Recurse

С помощью Copy-Item также можно просто объединить файлы из несколько директорий в одну (слияние директории), для этого нужно перечислить директории в ключе –Path:

Copy-Item -Path "C:\SourceFolder\*", "C:\SourceFolder2\*", "C:\SourceFolder3\*" -Destination "F:\DestFolder\"

Копирование с заменой и копирование с заменой read-only файлов

copy-item DirectoryExists

Для перезаписи файла с атрибутом read-only, нужно использовать ключ -Force. Если его не использовать, вы получите ошибку “отказано в доступе по пути… CopyFileInfoItemUnauthorizedAccessError”.

copy-item CopyFileInfoItemUnauthorizedAccessError

Чтобы скопировать файл с перезаписью файла с read-only атрибутом используйте параметр Force.

Copy-Item -Path "C:\SourceFolder\1.txt" -Destination "F:\DestFolder\1.txt" -Force

Совет. Чтобы не путаться, ключ –Force можно рассматривать как ключ для копирования с заменой.

Чтобы Copy-Item скопировал файлы из одной папки в другую без замены существующих файлов, можно использовать этот простой скрипт

Copy-Item (Join-Path "C:\SourceFolder\" "*") "F:\DestFolder\" -Exclude (Get-ChildItem "F:\DestFolder\") -Recurse

Этот скрипт скопирует все файлы и папки из C:\SourceFolder в F:\DestFolder без замены файлов уже существующих в F:\DestFolder

Копирование с фильтрацией по шаблону

С помощью Copy-Item можно скопировать файлы/директории выбранные с помощью wildcard символа * или с помощью символа ?. Также поддерживаются некоторые регулярные выражения

Для примера возьмём такую структуру файлов:

source

Выполним копирование командой:

Copy-Item -Path "C:\SourceFolder\fol*" -Destination "F:\DestFolder\"

Результат в F:\DestFolder\

copy-item replace

Теперь чистим папку назначения и выполняем:

Copy-Item -Path "C:\SourceFolder\folder3" -Destination "F:\DestFolder\"

result

Папка без цифры в окончании не скопировалась, потому что folder3 подразумевает что после folder будет как минимум еще 1 символ между 0 и 3

Исключение файлов при копировании

С помощью ключа –Exclude можно исключить файлы при копировании. Например, следующай команда скопирует все файлы кроме файлов с расширением txt.

Copy-Item -Path "C:\SourceFolder\*" -Destination "F:\DestFolder\" -Recurse -Force -Exclude "*.txt"

Аналогичным же образом можно применить ключ –Include, например

Copy-Item -Path "C:\SourceFolder\*" -Destination "F:\DestFolder\" -Recurse -Force -Include "*.txt"

Скопирует только txt файлы. Хотя для простоты гораздо удобнее использовать при копировании вид -Path "C:\SourceFolder\*.txt" .

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

Copy-File может копировать не только по SMB протоколу, но и через WinRM (WSMan).

Создайте новую сессию с компьютером testnode1 и выполните копирование в её контексте:

$session = New-PSSession -ComputerName testnode1
Copy-Item -Path "C:\SourceFolder\*" -ToSession $session -Destination "C:\SourceFolder\" -Recurse -Force

Эта команда скопирует файлы с локального компьютера из директории C:\SourceFolder на компьютер testnode1 в C:\SourceFolder\.

Примечание. Доступность WSMan на удаленном компьютере можно проверить с помощью командлета Test-WSMan.

Test-WSMan -ComputerName testnode1

Test-WSMan

Если WSMan не настроен, вы можете выполнить его быструю конфигурацию. Для этого откройте командную строку с правами администратора и выполните winrm quickconfig

winrm quickconfig

Также можно копировать и через обычные сетевые SMB шары, для этого просто используйте UNC формат сетевого пути.

Copy-Item -Path "C:\SourceFolder\*" -Destination "\\testnode1\C$\copy_tutorial\"

Можно скопировать файл с удаленного компьютера. Принцип такой же, как и при копировании файлов на удаленный компьютер, за исключением параметра –ToSession, вместо него нужно использовать –FromSession:

$session = New-PSSession -ComputerName testnode1
Copy-Item -FromSession $session -Path "C:\SourceFolder\*" -Destination "F:\DestFolder\" -Recurse -Force

Эта команда скопирует содержимое папки C:\SourceFolder\ с компьютера testnode1 на локальный компьютер в директорию F:\DestFolder

Ключ PassThru

Командлет Copy-Item (как и многие другие командлеты PowerShell) не возвращает результатов в консоль. Параметр PassThru применяется скриптах, или для лог-файлов, когда нужно получить список скопированных файлов и работать с ним дальше. Рассмотрим пример

$items = Copy-Item -Path "C:\SourceFolder\*" –Destination "\\testnode1\C$\copy_tutorial\" -PassThru

Переменная $items будет содержать список скопированных файлов, с которым вы можете работать дальше.Это значит что вы можете напрямую работать с этими файлами. Например выполнив команду Remove-Item $items[0] , вы удалите директорию folder.

copy-item passthru

Ключ Verbose

При использовании ключа -Verbose вы получите подробный лог операций копирования. Например, вывод команды

Copy-Item -Path "C:\SourceFolder\*.txt" -Destination "F:\DestFolder\" -Recurse -Force -Verbose

copy-item verbose лог

Несколько полезных скриптов с Copy-Item

Скопировать только файлы:

Get-ChildItem "C:\SourceFolder" -File -Recurse | Copy-Item -Destination "F:\DestFolder"

Скопировать структуру папок, без файлов:

$path = Get-ChildItem "C:\SourceFolder" -Recurse | ?
$dest = "F:\DestFolder\"
$parent = $path[0].Parent.Name
$path | foreach $_.FullName -match "$parent.+"
New-Item -ItemType directory ($dest + $Matches[0])
>

Copy-Item очень простой и удобный в использовании командлет PowerShell для выполнения операций копирования и перемещения файлов. В сочетании с другими инструментами PowerShell, Copy-Item также является мощным инструментом для написания скриптов.

Читайте также: