Nano Hash - криптовалюты, майнинг, программирование

PowerShell для копирования файлов в подпапки назначения, исключая определенные папки в месте назначения

Так что я танцевал с этим время от времени в течение дня, и мне постоянно вспоминается вечная фраза «Есть несколько способов снять шкуру с кошки», поэтому я решил обратиться к сообществу.

Сценарий:

Исходная папка «C: \ Updates» содержит 100 файлов с различными расширениями. Все необходимо скопировать в только подпапки "C: \ Prod \", перезаписав любые найденные дубликаты.

Предостережения:

  1. Имена подпапок (места назначения) в "C: \ Prod" довольно динамичны и часто меняются.

  2. Соглашение об именах используется для определения того, какие подпапки в месте назначения необходимо исключить при копировании исходных файлов (для сохранения исходных версий). Для простоты объяснения скажем, что любые имена папок, начинающиеся с "! Stop", должны быть исключены из процесса копирования. (! стоп *, если учитываются подстановочные знаки)

Итак, здесь я хочу, чтобы те, кто был выше меня, взяли на себя эту проблему в PS, если мне повезет. Сегодня я повозился с Copy-Item и xcopy, поэтому я очень рад услышать мнение других.

Спасибо!

-Крис


Ответы:


1

Попробуйте это:

Get-ChildItem -Path C:\Prod -Exclude !stop* -Directory `
| ForEach-Object { Copy-Item -Path C:\Updates\* -Destination $_ -Force }

Это захватывает каждую папку (переключатель -Directory гарантирует, что мы захватываем только папки) в C: \ Prod, которая не соответствует фильтру, и передает ее команде ForEach-Object, где мы запускаем команду Copy-Item для копирования файлов в каталог.

Переключатель -Directory доступен не во всех версиях PowerShell; Я не знаю, в какой версии он был введен в голову. Если у вас более старая версия PowerShell, которая не поддерживает -Directory, вы можете использовать этот сценарий:

Get-ChildItem -Path C:\Prod -Exclude !stop* `
| Where-Object { $_.PSIsContainer } `
| ForEach-Object { Copy-Item -Path C:\Updates\* -Destination $_ -Force }
11.11.2016
  • Вот и все! Я понятия не имел о переключателе -Destination, и, конечно же, я открыл ISE на своей виртуальной машине Windows 10 и БУМ там он был. Большое спасибо за ваш вклад. 14.11.2016
  • Из Получить -ChildItem для файловой системы: параметры Attributes, Directory, File, Hidden, ReadOnly и System были введены в Windows PowerShell 3.0 и действуют только для дисков с файловой системой. 16.09.2017

  • 2

    Чтобы выбрать только подпапки, которые не начинаются с "! Stop", сделайте следующее.

    $Source = "C:\Updates\*"
    $Dest =   "C:\Prod"
    $Stop =   "^!stop"
    
    $Destinations = GCI -Path $Dest |?{$_.PSIsContainer -and $_.Name -notmatch $Stop }
    ForEach ($Destination in $Destinations) {
      Copy-Item -Path $Source -Destination $Destination.FullName -Force 
    }
    

    Отредактировано. Теперь копирует все файлы из Update в подпрограммы Source, не начинающиеся с "! stop". Переключатель -whatif показывает, что произойдет, чтобы активировать скрипт, удалите -whatif.

    Edit2 Оптимизировал сценарий. Если также подпапки / подпапки C: \ Prod должны получать копии, включите параметр -rec для gci прямо перед каналом.

    11.11.2016
  • Привет, LotPings! Ваши первые 2 строки кода работают, как ожидалось, но ваша последняя ForEach ($ Destination in $ Destionations) {do copy / compare} немного теряет меня. Я очень ценю ваш вклад и хотел бы попросить вас отредактировать это, чтобы я мог отдать вам должное за публикацию! 14.11.2016
  • Они предназначены только для заполнения кода, предоставленного вами. Ваш сценарий немного неясен в этом аспекте. Копируются только файлы, если существует более старая версия, или все файлы. И предложение в скобках само по себе противоречие. Поэтому я предпочитаю сосредоточиться на основной части. 14.11.2016
  • @CharlieEcho Editt ответ, чтобы скопировать все файлы 14.11.2016
  • ДА! Ваш вклад очень хорош. Это прекрасно работает. Прошу прощения за непонятность и обновил вопрос. 14.11.2016
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

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

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..