Переношу 1С с одного сервера на другой, основные базы были клиент-серверные, переводим в файловую и добавляем в список. Делов на пять минут, так как их не много. А вот в файловых базах целая туча без логики во вложенности. Решил накидать скрипт, который сам сформирует список баз. Скрипт проходит рекурсивно, ищет файл базы 1Cv8.1CD и строит дерево. Если в каталоге нет файла БД и нет подкаталогов, то пропускает, во всех остальных случаях добавляет в файл списка баз. Из за этого возможны пустые каталоги
$Folder="D:\1C_BASES\Базы1с_8" $filev8i="$Folder\bases_here.v8i" $level=1 function CheckName{ param( [Parameter()] [string]$Name, [Parameter()] [string]$File, [Parameter()] [int]$cnt=1 ) $content=$(Get-Content $File) if ($content | Select-String -Pattern "[$Name]" -SimpleMatch -Quiet){ $cnt=$cnt+1 $res=$(CheckName -Name "$Name ($cnt)" -File $file -cnt $cnt) }else{ $res=$Name } return $res } function GetTree{ param( [Parameter()] [string]$Folder, [Parameter()] [string]$Parent="", [Parameter()] [int]$level ) $ChildList=$(Get-ChildItem -Path $Folder -Directory) foreach ($child in $ChildList){ $FullPath=$($child.FullName) $NameParentFolder=$Parent if (Test-Path "$FullPath\1Cv8.1CD"){ $pref="-"*$($level)+"|->" Write-Host("$pref Folder `"$child`" with 1C Bases") $Name=$(CheckName -Name $child -File $filev8i) $Text=@" [$Name] Connect=File=`"$FullPath`"; ID= OrderInList= Folder=$($NameParentFolder.Replace("\","/")) OrderInTree= External=0 ClientConnectionSpeed=Normal App=Auto WA=1 Version=8.3 AppArch=Auto DisableLocalSpeechToText=0 DisableLocalSpeechToText=0 "@ Write-Output($text) | Out-File -Encoding "UTF8" $filev8i -Append } else { if ($(get-childitem $FullPath -Directory).count -gt 0){ $pref="-"*$level+"|->" Write-Host("$pref Folder `"$child`":") $Name=$(CheckName -Name $child -File $filev8i) $text=@" [$name] ID= Folder=$($NameParentFolder.Replace("\","/")) "@ Write-Output($text) | Out-File -Encoding "UTF8" $filev8i -Append GetTree -Folder $FullPath -Parent "$NameParentFolder\$name" -level $($level+1) } else { $pref="-"*$level+"|->" Write-Host("$pref Folder `"$child`" not contain subfolders") } } } } Remove-Item -Path $filev8i -Force $currentParent=$(($Folder.Split("\"))[-1]) $text=@" [$currentParent] ID= Folder=/ "@ Write-Output($text) | Out-File -Encoding "UTF8" $filev8i -Append GetTree -Folder $Folder -level $level -Parent "/$currentParent"
Скрипт мою задачу решил, наводить лоск смысла не вижу смысла
Комментариев нет:
Отправить комментарий