# Устанавливаем кодировку для корректного отображения русских букв
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
# --- АВТО-ОПРЕДЕЛЕНИЕ ПУТИ ---
# Эта строка находит папку, в которой лежит сам скрипт
$scriptPath = Split-Path -Parent $MyInvocation.MyCommand.Definition
$sourceDir = Join-Path $scriptPath "Downloads_Bank_Docs"
$oldDocsDir = Join-Path $scriptPath "Old_Doc_Files"
$convertedDir = Join-Path $scriptPath "Converted_Docx_Files"
Write-Host "Рабочая директория: $scriptPath" -ForegroundColor Gray
# Создаем папки для сортировки, если их еще нет
if (!(Test-Path $oldDocsDir)) { New-Item -ItemType Directory -Path $oldDocsDir | Out-Null }
if (!(Test-Path $convertedDir)) { New-Item -ItemType Directory -Path $convertedDir | Out-Null }
Write-Host "`n--- 1. Ищу старые .doc файлы во всех папках (Batch) ---" -ForegroundColor Cyan
# Ищем файлы .doc рекурсивно (заходим в каждую подпапку Upload_Batch_X)
$docFiles = Get-ChildItem -Path $sourceDir -Recurse -File | Where-Object { $_.Extension -eq ".doc" }
if ($docFiles.Count -eq 0) {
Write-Host "[!] Старых .doc файлов не обнаружено." -ForegroundColor Yellow
Write-Host "Проверь, что папка 'Downloads_Bank_Docs' лежит там же, где этот скрипт." -ForegroundColor Gray
Read-Host "Нажми Enter, чтобы выйти"
exit
}
Write-Host "Найдено файлов: $($docFiles.Count). Начинаю перемещение и конвертацию..." -ForegroundColor Green
# Запускаем Word в фоновом режиме
try {
$word = New-Object -ComObject Word.Application
$word.Visible = $false
$count = 0
foreach ($file in $docFiles) {
$count++
Write-Host "[$count/$($docFiles.Count)] Обрабатываю: $($file.Name)" -ForegroundColor White
# 1. Перемещаем оригинал в архив Old_Doc_Files
$oldFilePath = Join-Path $oldDocsDir $file.Name
Move-Item -Path $file.FullName -Destination $oldFilePath -Force
# 2. Конвертируем в .docx
$newFileName = $file.BaseName + ".docx"
$newFilePath = Join-Path $convertedDir $newFileName
$document = $word.Documents.Open($oldFilePath)
# 16 — это код формата wdFormatXMLDocument (.docx)
$document.SaveAs([ref]$newFilePath, [ref]16)
$document.Close()
}
Write-Host "`n=== ВСЁ ГОТОВО! ===" -ForegroundColor Green
Write-Host "1. Старые .doc убраны в: Old_Doc_Files"
Write-Host "2. Новые .docx лежат в: Converted_Docx_Files" -ForegroundColor Cyan
Write-Host "Теперь можешь закинуть новые .docx обратно в нужные батчи."
} catch {
Write-Host "`n[!] Ошибка: $($_.Exception.Message)" -ForegroundColor Red
} finally {
if ($word) {
$word.Quit()
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($word) | Out-Null
}
}
Read-Host "`nНажми Enter, чтобы закрыть это окно"