Я новичок в этом, так что, надеюсь, я понимаю это правильно.За последние пару дней я провел довольно много исследований, которые я боролся с этим кодом, и я просто не могу заставить его делать то, что я хочу.
У меня есть исходный каталог, содержащий несколько каталогов.У меня есть каталог назначения, содержащий несколько каталогов.Все имена каталогов имеют четырехзначное число внутри них, но не в одном и том же месте имени.Я хочу найти этот номер в имени каждого из исходных каталогов и использовать этот номер, чтобы найти каталоги в целевом каталоге с такими же номерами в их имени.Как только я найду соответствующий каталог назначения, переместите исходный каталог, скажем, имя папки 33-fit-1234, в каталог назначения с соответствующим номером, т.е.33-F-1234.В настоящее время я делаю движение, копируя, а затем удаляю источник.
Имена исходных папок могут быть 33-ait-1743A или 33-xx-4533 UNKNOWN и т. Д.
Все имена целевых папок имеют формат: 33-x - ####, с некоторымис суффиксом из одной буквы, таким как A, B и т. д.
Вот код:
$sourceDirectory = "D:\Test Source"
$destinationDirectory = "D:\Test Dest"
$sourceFolders = Get-ChildItem -Path $sourceDirectory -Directory | Select-Object -ExpandProperty Name
$destinationFolders = Get-ChildItem -Path $destinationDirectory -Directory | Select-Object -ExpandProperty Name
$matchesInBoth = $sourceFolders -match "\d{4}" | ?{$_ -eq $_}
$matchesInBoth | ForEach-Object{
$sourcePath = (Join-Path $sourceDirectory $_)
Copy-Item -Path $sourcePath -Destination
$destinationDirectory\$matchesInBoth\$_ -Recurse -whatif
Remove-Item $sourcePath -Force -Recurse -WhatIf
}
Это близко, вывод, который я получаю:
What if: Performing the operation "Copy Directory" on target "Item: D:\Test
Source\33-FV-1414 Destination: D:\Test Dest\33-FIT-1414 33-FIT-1576 33-FIT-
1654A 33-fred-1234 unknown 33-FSL-1649 33-FV-1414 33-FV-1654 33-FV-1882
33-H-1657 33-H-1814 33-H-1924\33-FV-1414".
What if: Performing the operation "Remove Directory" on target "D:\Test
Source\33-FV-1414".
Проблема в том, что я в итоге копирую исходную папку в новую папку, названную в честь всех имен папок в моем исходном каталоге.
Я также пробовал этот код безрезультатно:
$sourceDirectory = "D:\Test Source"
$destinationDirectory = "D:\Test Dest"
$sourceFolders = Get-ChildItem -Path $sourceDirectory -Directory | Select- Object -ExpandProperty BaseName | Select-String "\d{4}"
$destinationFolders = Get-ChildItem -Path $destinationDirectory -Directory | Select-Object -ExpandProperty BaseName
$matchesInBoth = $destinationFolders | ?{$_ -contains $sourceFolders}
$matchesInBoth | ForEach-Object{
$sourcePath = (Join-Path $sourceDirectory $_)
Copy-Item -Path $sourcePath -Destination $destinationDirectory\$matchesInBoth\$_ -Recurse -whatif
Remove-Item $sourcePath -Force -Recurse -WhatIf
}
Имена исходных папок:
"D:\Test Source\33-FIT-1414"
"D:\Test Source\33-FIT-1576"
"D:\Test Source\33-FIT-1654A"
"D:\Test Source\33-fred-1234 unknown"
"D:\Test Source\33-FSL-1649"
"D:\Test Source\33-FV-1414"
"D:\Test Source\33-FV-1654"
"D:\Test Source\33-FV-1882"
"D:\Test Source\33-H-1657"
"D:\Test Source\33-H-1814"
"D:\Test Source\33-H-1924"
"D:\Test Source\asjhdsdlljhsdflj"
Имена папок назначения:
"D:\Test Dest\33"
"D:\Test Dest\33-F-1108"
"D:\Test Dest\33-F-1111"
"D:\Test Dest\33-F-1120"
"D:\Test Dest\33-F-1125"
"D:\Test Dest\33-F-1130"
"D:\Test Dest\33-F-1135"
"D:\Test Dest\33-F-1209"
"D:\Test Dest\33-F-1223"
"D:\Test Dest\33-F-1252"
"D:\Test Dest\33-F-1254"
"D:\Test Dest\33-F-1307"
"D:\Test Dest\33-F-1309"
"D:\Test Dest\33-F-1317"
"D:\Test Dest\33-F-1351"
"D:\Test Dest\33-F-1414"
"D:\Test Dest\33-F-1426"
"D:\Test Dest\33-F-1428"
"D:\Test Dest\33-F-1432"
"D:\Test Dest\33-F-1433"
"D:\Test Dest\33-F-1434"
"D:\Test Dest\33-F-1435"
"D:\Test Dest\33-F-1451"
"D:\Test Dest\33-F-1476"
"D:\Test Dest\33-F-1526"
"D:\Test Dest\33-F-1528"
"D:\Test Dest\33-F-1532"
"D:\Test Dest\33-F-1533"
"D:\Test Dest\33-F-1554"
"D:\Test Dest\33-F-1565"
"D:\Test Dest\33-F-1576"
"D:\Test Dest\33-F-1623"
"D:\Test Dest\33-F-1626"
"D:\Test Dest\33-F-1649"
"D:\Test Dest\33-F-1654"
"D:\Test Dest\33-F-1659"
"D:\Test Dest\33-F-1671"
"D:\Test Dest\33-F-1709"
"D:\Test Dest\33-F-1712"
"D:\Test Dest\33-F-1799"
"D:\Test Dest\33-F-1800"
"D:\Test Dest\33-F-1801"
"D:\Test Dest\33-F-1882"
"D:\Test Dest\33-F-1883"
"D:\Test Dest\33-F-2000"
"D:\Test Dest\33-F-2001"
"D:\Test Dest\33-F-2002"
"D:\Test Dest\33-ggg-1234"
"D:\Test Dest\1234"
"D:\Test Dest\daddybear"
Мысли?