|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » Любой язык - [решено] Переименовать файл по содержимому |
|
Любой язык - [решено] Переименовать файл по содержимому
|
Пользователь Сообщения: 86 |
Приветствую. Помогите, пожалуйста, я не спец.
Есть очень много файлов default.htm, каждый лежит в своей папке. Это html страницы, внутри у каждой из них есть тэг <title>Название страницы</title>. Как бы переименовать каждый файл default.htm в Название страницы.html ? Повторюсь, каждый в своей папке, так что пересечений не будет. И еще в названии страницы присутствует символ / (например русское / английское название) его надо на что-то заменить. И может быть еще какие-то запрещенные символы. |
|
Отправлено: 19:23, 18-01-2015 |
Пользователь Сообщения: 86
|
Профиль | Отправить PM | Цитировать Iska, спасибо все получилось. Иногда проскакивала ошибка "Слишком длинный путь или имя файла", такие файлы не переименовались, но это не страшно, их немного. Полноценный юникод, даже иероглифы и прочие зарубежные нац. символы в имена файлов перенеслись.
|
Отправлено: 17:46, 19-01-2015 | #11 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата deniskx:
Попробуйте так: 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 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
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 |
|