Имя пользователя:
Пароль:
 | Правила  

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

Ответить
Настройки темы
CMD/BAT - Заменить символы в названия папок

Новый участник


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

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


Всем привет!
Уважаемые программисты, можете помочь с написанием bat или CMD, суть вопроса, в названиях файла присутствуют символы C С или B В и т.д., они разные одна английская другая русская, а хотелось бы их заменить все на английские, а папок море в ручника это не выполнимо...)

Отправлено: 12:30, 15-08-2023

 

Аватара для DJ Mogarych

fascinating rhythm


Moderator


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

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


Цитата Adamm:
символы C С или B В и т.д. »
"И т. д." напишите полностью.

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)


Отправлено: 13:31, 15-08-2023 | #2



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

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


Новый участник


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

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


Е_E Т_T О_O Р_P А_A Н_H К_K Х_X С_C В_B М_M е_e т_t о_o р_p а_a н_h к_k х_x с_c в_b м_m
сущесвующая_заменяемая

Отправлено: 13:42, 15-08-2023 | #3


Аватара для YuS_2

Crazy


Contributor


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

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


powershell поможет?

-------
scio me nihil scire. Ѫ


Отправлено: 13:49, 15-08-2023 | #4


Аватара для DJ Mogarych

fascinating rhythm


Moderator


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

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


Как-то так (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 после проверки.

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)

Это сообщение посчитали полезным следующие участники:

Отправлено: 14:22, 15-08-2023 | #5


Аватара для YuS_2

Crazy


Contributor


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

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


Код: Выделить весь код
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)
}
Цитата DJ Mogarych:
|? psiscontainer »
Цитата Adamm:
в названиях файла присутствуют символы »

-------
scio me nihil scire. Ѫ

Это сообщение посчитали полезным следующие участники:

Отправлено: 14:29, 15-08-2023 | #6


Новый участник


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

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


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

Отправлено: 14:35, 15-08-2023 | #7


Аватара для DJ Mogarych

fascinating rhythm


Moderator


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

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


Цитата Adamm:
Исходный и результирующий путь должны различаться »
Значит, нечего переименовывать, с именем всё в порядке.

Скопируйте скрипт ещё раз, там добавилось
Код: Выделить весь код
-ErrorAction SilentlyContinue
YuS_2, а как у вас в хэш-таблице сосуществуют
Код: Выделить весь код
[char]'А' = 'A'
[char]'а' = 'a'
?
По умолчанию вроде бы так не работает, надо явно указывать тип.

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)


Последний раз редактировалось DJ Mogarych, 15-08-2023 в 14:58.


Отправлено: 14:53, 15-08-2023 | #8


Аватара для YuS_2

Crazy


Contributor


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

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


Цитата DJ Mogarych:
как у вас в хэш-таблице сосуществуют »
Код: Выделить весь код
@{[char]'А'=1;[char]'а'=2}
[char]'A' - это совсем не то же самое, что и 'A'
во втором случае, это [string]

-------
scio me nihil scire. Ѫ

Это сообщение посчитали полезным следующие участники:

Отправлено: 15:07, 15-08-2023 | #9


Новый участник


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

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


Спасибо огромное! Все работает!

Отправлено: 15:15, 15-08-2023 | #10



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - Вывести названия непустых папок maxim43g Скриптовые языки администрирования Windows 5 19-10-2022 16:09
CMD/BAT - [решено] Названия папок ПРОПИСНЫМИ буквами Sisin Скриптовые языки администрирования Windows 13 16-07-2022 01:18
2008 R2 - Названия папок в профиле пользователя после перемещения Lipser2008 Windows Server 2008/2008 R2 16 17-04-2017 16:45
Интерфейс - [решено] Изменились названия папок в C:\Users ziken Microsoft Windows 7 1 12-12-2013 16:24
CMD/BAT - Как заменить символы в текстовом файле yaoleg2 Скриптовые языки администрирования Windows 0 29-03-2013 15:48




 
Переход