Вот сценарий: у нас есть рабочий веб-сервер, на котором есть несколько тысяч файлов и папок, к которым прикреплен «_DATE». Мы хотим переместить их во временную папку (убедитесь, что они не используются), а позже удалите файлы.
Я могу использовать:
Get-ChildItem -Path W:\IIS -Recurse | Where-Object{$_.Name -match "_\d{8,10}$"}
Чтобы получить список всех файлов / папок и их расположение. Но ручное удаление их всех кажется трудоемким, особенно если это понадобится в будущем. Я нашел несколько примеров, которые почти делают то, что я хочу:
cls
$source = "W:\IIS"
$destination = "C:\Temp\DevTest"
foreach ($i in Get-ChildItem -Path $source -Recurse)
{
if ($i.Name -match "_\d{8,10}$")
{
Copy-Item -Path $i.FullName -Destination $item.FullName.ToString().Replace($source,$destination).Trim($item.Name)
}
}
И:
cls
$source = "W:\IIS"
$destination = "C:\Temp\DevTest"
$bin = Get-ChildItem -Path $source -Recurse | Where-Object{$_.Name -match "_\d{8,10}$"}
foreach ($item in $bin) {
Copy-Item -Path $item.FullName -Container -Destination $item.FullName.ToString().Replace($source,$destination).Trim($item.Name) -Recurse
}
Проблема с этими двумя заключаются в том, что, когда я тестирую их с помощью простого копирования элемента, я получаю плоский каталог, и мне нужно сохранить структуру каталогов, чтобы, если движение пойдет не так, я мог вернуться (желательно, перетащив все папки обратно в IIS папка) или я получаю копию множества дополнительных папок / файлов, которые не появляются, когда я запускаю первую команду.
Изменение моей первой команды на:
Get-ChildItem -Path W:\IIS -Recurse | Where-Object{$_.Name -match "_\d{8,10}$"} | Copy-Item -Container -Destination C:\Temp\DevTest -Recurse
Будет копировать все Мне нужно, но с плоским деревом каталогов, а не с сохранением древовидной структуры (но с заменой исходного каталога на место назначения).
Есть предложения / комментарии?