У нас есть форма графического интерфейса 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
}
}
Ожидайте поведение, идентичное текущему решению, за исключением использования неидентичных путей. Никаких конкретных ошибок, поскольку мы просто не знаем, как это сделать.