Robocopy ForEach, но совершенно разные пути? - PullRequest
0 голосов
/ 06 июня 2019

У нас есть форма графического интерфейса PowerShell с некоторыми флажками, соответствующими папкам, и если флажок установлен, для этой конкретной папки будет выполнена Robocopy. Например, если флажок1 установлен, C: \ Source \ Folder1 будет скопирован в C: \ Target \ Folder1 и т. Д. В настоящее время это прекрасно работает с циклом ForEach, где сценарий берет имя папки из каждого флажка Текст. НО, скоро мы получим другую файловую структуру, поэтому пути больше не будут идентичны (папка больше не будет находиться в той же папке, как сейчас). Например, папка 1 может быть перемещена в C: \ Plan \ folder1, а папка 2 может быть перемещена в C: \ ForDesignDept \ folder2 - это только примеры.

Идея решения: мы понимаем, что можем добавить свойство .Tag к флажкам и добавить любые данные, например, путь к файлу, но нам понадобится как минимум 2 значения, чтобы определить исходный и целевой путь.

Мы считаем, что это можно сделать, просто немного поиграв с нашим текущим представлением функций ниже?

TL; DR: Нам нужно изменить наш текущий цикл ForEach, чтобы использовать разные пути для каждого цикла вместо идентичных путей, где «folder1, folder2 и т. Д.» Все расположены в одной папке, как они есть в настоящее время.

Любая помощь будет оценена! Спасибо

Мы пробовали разные варианты добавления нескольких значений к свойству .Tag, например так: мы пробовали двойные кавычки, одинарные кавычки и так далее. И следующая проблема может заключаться в том, что Powershell скажет, что пункт назначения не указан, потому что он думает, что свойство .Tag - это всего лишь 1 значение. $ checkbox1.Tag = "C: \ Plan \ Folder1" "C: \ ForDesignDept \ Folder1"

Как показано здесь, скрипт берет имя папки из каждого флажка Текст.

{
    $checkboxes = @($checkbox1, $checkbox2, $checkbox3)

    foreach ($checkbox in $checkboxes) 
    {
        if ($checkbox.Checked) 
        {
            robocopy "c:\source\$($checkbox.Text)" "c:\target\$($checkbox.Text)" /njh /njs /ndl /np /tee | ForEach-Object { $outputBox.AppendText($_ + "`r`n") }
        } 
        else 
        {
            $outputBox.AppendText("$($checkbox.Text) NOT SELECTED" + "`r`n")
        }
    $checkbox.Checked=$False
    }
}

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

...