Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » Любой язык - [решено] Переименовать файл по содержимому

Ответить
Настройки темы
Любой язык - [решено] Переименовать файл по содержимому

Пользователь


Сообщения: 86
Благодарности: 15

Профиль | Отправить PM | Цитировать


Изменения
Автор: deniskx
Дата: 18-01-2015
Приветствую. Помогите, пожалуйста, я не спец.
Есть очень много файлов default.htm, каждый лежит в своей папке. Это html страницы, внутри у каждой из них есть тэг <title>Название страницы</title>. Как бы переименовать каждый файл default.htm в Название страницы.html ? Повторюсь, каждый в своей папке, так что пересечений не будет.

И еще в названии страницы присутствует символ / (например русское / английское название) его надо на что-то заменить. И может быть еще какие-то запрещенные символы.

Отправлено: 19:23, 18-01-2015

 

Пользователь


Сообщения: 86
Благодарности: 15

Профиль | Отправить PM | Цитировать


Iska, спасибо все получилось. Иногда проскакивала ошибка "Слишком длинный путь или имя файла", такие файлы не переименовались, но это не страшно, их немного. Полноценный юникод, даже иероглифы и прочие зарубежные нац. символы в имена файлов перенеслись.

Отправлено: 17:46, 19-01-2015 | #11



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата deniskx:
Иногда проскакивала ошибка "Слишком длинный путь или имя файла", такие файлы не переименовались, но это не страшно, их немного. »
Длинное содержимое тэга «title»? Я, к сожалению, об этом не подумал. Хотя должен был бы.

Попробуйте так:
Код: Выделить весь код
Add-Type -AssemblyName System.Web

Set-Variable -Name MAX_PATH -Value 260 -Option Constant -ErrorAction SilentlyContinue

$sSourceFolder = "E:\Песочница\0423\01"

if(Test-Path -Path $sSourceFolder -PathType Container) {
    Get-ChildItem -Path $sSourceFolder -Include default.htm -Recurse |`
        ForEach-Object -Process {
            if(-not $_.PSIsContainer) {
                Write-Host "$($_.DirectoryName)" -ForegroundColor DarkGreen
                Write-Host "`t$($_.Name)" -ForegroundColor Green
                
                $sContent = Get-Content -Path $_.FullName -Encoding UTF8
                $oMatch   = [System.Text.RegularExpressions.Regex]::Match($sContent, "(?i)<(TITLE)[^<>]*>(?<title>[^<>]+)</\1>")
                
                if($oMatch.Success) {
                    $sNewName = ([System.Web.HttpUtility]::HtmlDecode($oMatch.Groups.Item("title").Value) -replace '[<>:"/\\|?*]+', "_") + $_.Extension
                    
                    if(((Join-Path -Path $_.DirectoryName -ChildPath $sNewName).Length) -ge $MAX_PATH) {
                        $sNewName = $sNewName.Substring((Join-Path -Path $_.DirectoryName -ChildPath $sNewName).Length - ($MAX_PATH - 1))
                    }
                    
                    Write-Host "`t`t$sNewName" -ForegroundColor Cyan
                    
                    Rename-Item -Path $_.FullName -NewName $sNewName
                } else {
                    Write-Host "`tCan't determine TITLE tag." -ForegroundColor Red
                }
            }
        }
} else {
    Write-Host "Can't find source folder [$sSourceFolder]." -ForegroundColor Red
}
Цитата deniskx:
Полноценный юникод, даже иероглифы и прочие зарубежные нац. символы в имена файлов перенеслись. »
Это Вам свезло, что всё содержимое в одной, заранее известной кодировке.
Это сообщение посчитали полезным следующие участники:

Отправлено: 12:48, 20-01-2015 | #12



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » Любой язык - [решено] Переименовать файл по содержимому

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
VBS/WSH/JS - Если файлы отличаются (по дате, по содержимому ...), то произвести замену norest2005 Скриптовые языки администрирования Windows 2 28-01-2014 04:00
CMD/BAT - [решено] Как копировать файл по определенному содержимому Kotan Скриптовые языки администрирования Windows 3 11-07-2013 14:58
CMD/BAT - [решено] Переименовать файл Mikhail_R Скриптовые языки администрирования Windows 8 21-03-2013 09:35
CMD/BAT - Как найти в архиве тестовые файлы по содержимому, а не по расширению? yaoleg2 Скриптовые языки администрирования Windows 0 04-01-2013 15:18
Интерфейс - Как в Viste найти файл по содержимому sagitt Microsoft Windows Vista 2 15-12-2008 10:40




 
Переход