Показать полную графическую версию : Заменить символы в названия папок
Всем привет!
Уважаемые программисты, можете помочь с написанием bat или CMD, суть вопроса, в названиях файла присутствуют символы C С или B В и т.д., они разные одна английская другая русская, а хотелось бы их заменить все на английские, а папок море в ручника это не выполнимо...)
DJ Mogarych
15-08-2023, 13:31
символы C С или B В и т.д. »
"И т. д." напишите полностью.
Е_E Т_T О_O Р_P А_A Н_H К_K Х_X С_C В_B М_M е_e т_t о_o р_p а_a н_h к_k х_x с_c в_b м_m
сущесвующая_заменяемая
DJ Mogarych
15-08-2023, 14:22
Как-то так (Powershell):
$hash = New-Object system.collections.hashtable
$hash.Е = "E"
$hash.Т = "T"
$hash.О = "O"
$hash.Р = "P"
$hash.А = "A"
$hash.Н = "H"
$hash.К = "K"
$hash.Х = "X"
$hash.С = "C"
$hash.В = "B"
$hash.М = "M"
$hash.е = "e"
$hash.т = "t"
$hash.о = "o"
$hash.р = "p"
$hash.а = "a"
$hash.н = "h"
$hash.к = "k"
$hash.х = "x"
$hash.с = "c"
$hash.в = "b"
$hash.м = "m"
$folders = dir 'D:\temp\log' -Recurse |? psiscontainer
foreach ($folder in $folders) {
$newName = ($folder.name.ToCharArray() |% {
if ($hash["$_"]) {$hash["$_"]}
else {$_}
}) -join ''
Rename-Item $folder.FullName $newname -ErrorAction SilentlyContinue -WhatIf
}
Чтобы реально переименовывало, уберите -WhatIf после проверки.
function trans {
param(
[parameter(mandatory=$true,valuefrompipeline=$true)]
[allowemptystring()]
[allownull()]
[string]$fstring
)
begin {
$charr = @{
[char]'А' = 'A'
[char]'а' = 'a'
[char]'В' = 'B'
[char]'в' = 'b'
[char]'Е' = 'E'
[char]'е' = 'e'
[char]'К' = 'K'
[char]'к' = 'k'
[char]'М' = 'M'
[char]'м' = 'm'
[char]'Н' = 'H'
[char]'н' = 'h'
[char]'О' = 'O'
[char]'о' = 'o'
[char]'Р' = 'P'
[char]'р' = 'p'
[char]'С' = 'C'
[char]'с' = 'c'
[char]'Т' = 'T'
[char]'т' = 't'
[char]'Х' = 'X'
[char]'х' = 'x'
}
}
process{
$arr = new-object system.text.stringbuilder
foreach ($item in $fstring.tochararray()){
if ($charr[$item] -cne $null){
$null = $arr.append($charr[$item])
} else {
$null = $arr.append($item)
}
}
}
end {$arr.tostring().trim("`n")}
}
#Здесь надо указать абсолютный путь к каталогу:
$folder = '.\TEST'
dir $folder -rec -file|%{
ren $_.fullname $($_.name|trans)
}
|? psiscontainer »
в названиях файла присутствуют символы »
DJ Mogarych, все работает но в консоли красным отвечает:
Rename-Item : Исходный и результирующий путь должны различаться.
строка:31 знак:5
+ Rename-Item $folder.FullName $newname
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : WriteError: (C:\Users\Rychko...fdsfds\11-104-J:String) [Rename-Item], IOException
+ FullyQualifiedErrorId : RenameItemIOError,Microsoft.PowerShell.Commands.RenameItemCommand
Rename-Item : Не удается выполнить переименование, так как элемент в "C:\Users\RychkovEA\Desktop\dsfdsfds\11-101-E\4124
-CD-VD-DT" не существует.
строка:31 знак:5
+ Rename-Item $folder.FullName $newname
DJ Mogarych
15-08-2023, 14:53
Исходный и результирующий путь должны различаться »
Значит, нечего переименовывать, с именем всё в порядке.
Скопируйте скрипт ещё раз, там добавилось
-ErrorAction SilentlyContinue
YuS_2, а как у вас в хэш-таблице сосуществуют
[char]'А' = 'A'
[char]'а' = 'a'
?
По умолчанию вроде бы так не работает, надо явно указывать тип.
как у вас в хэш-таблице сосуществуют »
@{[char]'А'=1;[char]'а'=2}
[char]'A' - это совсем не то же самое, что и 'A'
во втором случае, это [string]
Спасибо огромное! Все работает!
Uragan66
15-08-2023, 15:17
С функцией полной транслитерации. Может пригодится.
function Translit ([string]$inString)
{
#Создаём хеш-таблицу соответствия символов
$Translit = @{
[char]'а' = "a"
[char]'А' = "A"
[char]'б' = "b"
[char]'Б' = "B"
[char]'в' = "v"
[char]'В' = "V"
[char]'г' = "g"
[char]'Г' = "G"
[char]'д' = "d"
[char]'Д' = "D"
[char]'е' = "e"
[char]'Е' = "E"
[char]'ё' = "yo"
[char]'Ё' = "Yo"
[char]'ж' = "zh"
[char]'Ж' = "Zh"
[char]'з' = "z"
[char]'З' = "Z"
[char]'и' = "i"
[char]'И' = "I"
[char]'й' = "j"
[char]'Й' = "J"
[char]'к' = "k"
[char]'К' = "K"
[char]'л' = "l"
[char]'Л' = "L"
[char]'м' = "m"
[char]'М' = "M"
[char]'н' = "n"
[char]'Н' = "N"
[char]'о' = "o"
[char]'О' = "O"
[char]'п' = "p"
[char]'П' = "P"
[char]'р' = "r"
[char]'Р' = "R"
[char]'с' = "s"
[char]'С' = "S"
[char]'т' = "t"
[char]'Т' = "T"
[char]'у' = "u"
[char]'У' = "U"
[char]'ф' = "f"
[char]'Ф' = "F"
[char]'х' = "h"
[char]'Х' = "H"
[char]'ц' = "c"
[char]'Ц' = "C"
[char]'ч' = "ch"
[char]'Ч' = "Ch"
[char]'ш' = "sh"
[char]'Ш' = "Sh"
[char]'щ' = "sch"
[char]'Щ' = "Sch"
[char]'ъ' = ""
[char]'Ъ' = ""
[char]'ы' = "y"
[char]'Ы' = "Y"
[char]'ь' = ""
[char]'Ь' = ""
[char]'э' = "e"
[char]'Э' = "E"
[char]'ю' = "yu"
[char]'Ю' = "Yu"
[char]'я' = "ya"
[char]'Я' = "Ya"
}
[string]$inString = $_.Name
$TranslitText =""
foreach ($CHR in $inCHR = $inString.ToCharArray())
{
if ($Translit[$CHR] -cne $Null)
{ $TranslitText += $Translit[$CHR] }
else
{ $TranslitText += $CHR }
}
return $TranslitText
}
$folder = '.\Test'
Get-ChildItem -Path $folder -Directory | Rename-Item -NewName {Translit} -ErrorAction SilentlyContinue
функцией полной транслитерации »
если говорить о полной транслитерации... то требуется реализация и обратного действия...
По-моему, уже где-то здесь на форуме было, но сейчас не могу найти, вот:
# .\script.ps1 'АБВГДЕЁЖЗИКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ - абвгдеёжзиклмнопрстуфхцчшщъыьэюя'
# .\script.ps1 'ABVGDEYOZHZIKLMNOPRSTUFXCCHSHSHH``Y``E`YUYA - abvgdeyozhziklmnoprstufxcchshshh``y``e`yuya' -rev
# ГОСТ 7.79-2000 тип Б ( https://ru.wikipedia.org/wiki/ISO_9 , http://docs.cntd.ru/document/1200026226 )
# Скрипт оптимизирован 24.04.20г. на предмет скорости выполнения. Заменен способ формирования основного массива,
# теперь используется system.text.stringbuilder
[cmdletbinding()]
param(
[parameter(mandatory=$true,valuefrompipeline=$true)]
[allowemptystring()]
[allownull()]
[string[]]$string,
[switch]$reverse
)
function translit {
param(
[parameter(mandatory=$true,valuefrompipeline=$true)]
[allowemptystring()]
[allownull()]
[string]$fstring
)
begin {
$arr1 = @(
'8979','89111','121111','9072','90104','122104','6790','67122','99122','6772',
'67104','99104','8372','83104','115104','837272','83104104','115104104','9696','8996',
'12196','6996','10196','8985','89117','121117','8965','8997','12197'
)
$charr = @{
[char]'А' = 'A'
[char]'а' = 'a'
[char]'Б' = 'B'
[char]'б' = 'b'
[char]'В' = 'V'
[char]'в' = 'v'
[char]'Г' = 'G'
[char]'г' = 'g'
[char]'Д' = 'D'
[char]'д' = 'd'
[char]'Е' = 'E'
[char]'е' = 'e'
[char]'Ё' = 'YO'
[char]'ё' = 'yo'
[char]'Ж' = 'ZH'
[char]'ж' = 'zh'
[char]'З' = 'Z'
[char]'з' = 'z'
[char]'И' = 'I'
[char]'и' = 'i'
[char]'Й' = 'J'
[char]'й' = 'j'
[char]'К' = 'K'
[char]'к' = 'k'
[char]'Л' = 'L'
[char]'л' = 'l'
[char]'М' = 'M'
[char]'м' = 'm'
[char]'Н' = 'N'
[char]'н' = 'n'
[char]'О' = 'O'
[char]'о' = 'o'
[char]'П' = 'P'
[char]'п' = 'p'
[char]'Р' = 'R'
[char]'р' = 'r'
[char]'С' = 'S'
[char]'с' = 's'
[char]'Т' = 'T'
[char]'т' = 't'
[char]'У' = 'U'
[char]'у' = 'u'
[char]'Ф' = 'F'
[char]'ф' = 'f'
[char]'Х' = 'X'
[char]'х' = 'x'
[char]'Ц' = 'C'
[char]'ц' = 'c'
[char]'Ч' = 'CH'
[char]'ч' = 'ch'
[char]'Ш' = 'SH'
[char]'ш' = 'sh'
[char]'Щ' = 'SHH'
[char]'щ' = 'shh'
[char]'Ъ' = '``'
[char]'ъ' = '``'
[char]'Ы' = 'Y`'
[char]'ы' = 'y`'
[char]'Ь' = '`'
[char]'ь' = '`'
[char]'Э' = 'E`'
[char]'э' = 'e`'
[char]'Ю' = 'YU'
[char]'ю' = 'yu'
[char]'Я' = 'YA'
[char]'я' = 'ya'
}
$revcharr = @{
[char]'A' = 'А'
[char]'a' = 'а'
[char]'B' = 'Б'
[char]'b' = 'б'
[char]'V' = 'В'
[char]'v' = 'в'
[char]'G' = 'Г'
[char]'g' = 'г'
[char]'D' = 'Д'
[char]'d' = 'д'
[char]'E' = 'Е'
[char]'e' = 'е'
$(-join [int[]][char[]]'YO') = 'Ё' <#89-79#>
$(-join [int[]][char[]]'Yo') = 'Ё' <#89-111#>
$(-join [int[]][char[]]'yo') = 'ё' <#121-111#>
$(-join [int[]][char[]]'ZH') = 'Ж' <#90-72#>
$(-join [int[]][char[]]'Zh') = 'Ж' <#90-104#>
$(-join [int[]][char[]]'zh') = 'ж' <#122-104#>
[char]'Z' = 'З'
[char]'z' = 'з'
[char]'I' = 'И'
[char]'i' = 'и'
[char]'J' = 'Й'
[char]'j' = 'й'
[char]'K' = 'К'
[char]'k' = 'к'
[char]'L' = 'Л'
[char]'l' = 'л'
[char]'M' = 'М'
[char]'m' = 'м'
[char]'N' = 'Н'
[char]'n' = 'н'
[char]'O' = 'О'
[char]'o' = 'о'
[char]'P' = 'П'
[char]'p' = 'п'
[char]'R' = 'Р'
[char]'r' = 'р'
[char]'S' = 'С'
[char]'s' = 'с'
[char]'T' = 'Т'
[char]'t' = 'т'
[char]'U' = 'У'
[char]'u' = 'у'
[char]'F' = 'Ф'
[char]'f' = 'ф'
[char]'X' = 'Х'
[char]'x' = 'х'
[char]'C' = 'Ц'
$(-join [int[]][char[]]'CZ') = 'Ц' <#67-90#>
$(-join [int[]][char[]]'Cz') = 'Ц' <#67-122#>
[char]'c' = 'ц'
$(-join [int[]][char[]]'cz') = 'ц' <#99-122#>
$(-join [int[]][char[]]'CH') = 'Ч' <#67-72#>
$(-join [int[]][char[]]'Ch') = 'Ч' <#67-104#>
$(-join [int[]][char[]]'ch') = 'ч' <#99-104#>
$(-join [int[]][char[]]'SH') = 'Ш' <#83-72#>
$(-join [int[]][char[]]'Sh') = 'Ш' <#83-104#>
$(-join [int[]][char[]]'sh') = 'ш' <#115-104#>
$(-join [int[]][char[]]'SHH') = 'Щ' <#83-72-72#>
$(-join [int[]][char[]]'Shh') = 'Щ' <#83-104-104#>
$(-join [int[]][char[]]'shh') = 'щ' <#115-104-104#>
#[char]'' = 'Ъ'
$(-join [int[]][char[]]'``') = 'ъ' <#96-96#>
$(-join [int[]][char[]]'Y`') = 'Ы' <#89-96#>
$(-join [int[]][char[]]'y`') = 'ы' <#121-96#>
#[char]'`' = 'Ь'
[char]'`' = 'ь'
$(-join [int[]][char[]]'E`') = 'Э' <#69-96#>
$(-join [int[]][char[]]'e`') = 'э' <#101-96#>
$(-join [int[]][char[]]'YU') = 'Ю' <#89-85#>
$(-join [int[]][char[]]'Yu') = 'Ю' <#89-117#>
$(-join [int[]][char[]]'yu') = 'ю' <#121-117#>
$(-join [int[]][char[]]'YA') = 'Я' <#89-65#>
$(-join [int[]][char[]]'Ya') = 'Я' <#89-97#>
$(-join [int[]][char[]]'ya') = 'я' <#121-97#>
}
}
process {
$arr = new-object system.text.stringbuilder
if($reverse){
$f2,$f3,$j,$m = $true,$true,0,0
$cnt = $fstring.tochararray().length
$arrtmp = $fstring.tochararray()
for($i=0;$i -lt $cnt;$i++){
if ($f2 -and $f3 -and $arr1 -match "^$([int][char]$arrtmp[$i])") {
if (($i+2) -lt $cnt){
for ($k=0;$k -le 2;$k++){
[string]$str += "$([int][char]$arrtmp[($i+$k)])"
}
if ($arr1 -contains $str){$f3 = $false}
$str = $null
}
if (($i+1) -lt $cnt -and $f3){
for ($l=0;$l -le 1;$l++){
[string]$str += "$([int][char]$arrtmp[($i+$l)])"
}
if ($arr1 -contains $str){$f2 = $false}
$str = $null
}
}
if (!$f3){
[string]$str += "$([int][char]$arrtmp[$i])";$j++
if ($j -ge 3){
$f3 = $true;$j = 0
$null = $arr.append($revcharr[$str])
$str = $null
}
} elseif (!$f2){
[string]$str += "$([int][char]$arrtmp[$i])";$m++
if ($m -ge 2){
$f2 = $true;$m = 0
$null = $arr.append($revcharr[$str])
$str = $null
}
} else {
if ($revcharr[$arrtmp[$i]] -cne $null){
$null = $arr.append($revcharr[$arrtmp[$i]])
} else {
$null = $arr.append($arrtmp[$i])
}
}
}
$null = $arr.append("`n")
} else {
foreach ($item in $fstring.tochararray()){
if ($charr[$item] -cne $null){
$null = $arr.append($charr[$item])
} else {
$null = $arr.append($item)
}
}
$null = $arr.append("`n")
}
}
end {$arr.tostring().trim("`n")}
}
$string|translit
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.