Переношу 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"
Скрипт мою задачу решил, наводить лоск смысла не вижу смысла
Комментариев нет:
Отправить комментарий