Показать полную графическую версию : [решено] Названия папок ПРОПИСНЫМИ буквами
Помогите, пожалуйста, с батником, который менял бы название всех папок рядом с собой (не включая вложенные) на то же название только написанное прописными буквами.
Serguei Kouzmine
14-07-2022, 03:06
повершел справится с задачей легко
move-item -path 'привет' -destination ('привет'.ToUpper())
чем мучиться (про себя употребил другое слово) с батникам осваивайте уже Powershell
повершел справится с задачей легко
move-item -path 'привет' -destination ('привет'.ToUpper())
чем мучиться (про себя употребил другое слово) с батникам осваивайте уже Powershell
Это, конечно, здорово. Я находил вариант на Powershell в инете, но задача-то другая. Мне все папки надо переименовать, не включая вложенные.
DJ Mogarych
14-07-2022, 09:16
Powershell
dir $PSScriptRoot -Directory |? { $_.Name -cne ($newName = $_.Name.ToUpper()) } |% {
$tmpName = Rename-Item -Path "$($_.FullName)" -NewName "tmp$newName" -PassThru
Rename-Item -Path "$($tmpName.FullName)" -NewName $newName
}
Не сработал на Windows 7, видимо powershell старый. Но обновить нельзя.
Можно ли как-то решить задачу с помощью bat?
Serguei Kouzmine
15-07-2022, 03:08
как нитересно а ошибку пушкин будет показывать ?
Serguei Kouzmine
15-07-2022, 03:36
dir $PSScriptRoot -Directory |? { $_.Name -cne ($newName = $_.Name.ToUpper()) } |% {
$tmpName = Rename-Item -Path "$($_.FullName)" -NewName "tmp$newName" -PassThru
Rename-Item -Path "$($tmpName.FullName)" -NewName $newName
}
»
а чего так сложно ? проще можно вроде
DJ Mogarych
15-07-2022, 07:58
Windows нечувствителен к регистру имён, поэтому переименовывать нужно дважды.
как нитересно а ошибку пушкин будет показывать ? »
Да чего там показывать... powershell v2, в командлете Get-ChildItem параметр -directory не поддерживается...
Тут интересно другое, сам принцип радикального консерватизма (начиная от версии ОС и заканчивая нежеланием ничего обновлять, в принципе). Ведь человеку предлагают вспахать поле трактором, а он говорит: "- не, дайте мне лопату, у меня сил и терпения много, буду вручную копать", как-то так... :)
А чтобы запустить скрипт на ps 2, надо просто выборку каталогов делать так:
dir -force|?{$_.psiscontainer}|%{$_.fullname.toupper()}
или сразу переименовать дважды, учитывая, что windows не различает регистр имен:
dir -force|?{$_.psiscontainer}|%{mi $_.fullname ($_.name.toupper()+"._1") -force -pass}|%{mi $_.fullname ($_.name -replace "\._1$") -force}
DJ Mogarych
15-07-2022, 14:35
Не сработал на Windows 7, видимо powershell старый. Но обновить нельзя. »
Обновить нельзя что - систему или Powershell?
Если что, то Powershell можно обновить и на семёрке (https://docs.microsoft.com/ru-ru/powershell/scripting/windows-powershell/wmf/setup/install-configure).
megaloman
15-07-2022, 15:40
Как вариант, VBS-скрипт.Option Explicit
Dim FSO: Set FSO = CreateObject("Scripting.FileSystemObject")
Dim FolderIn
With WScript.Arguments
If .Count > 0 Then
Dim BoxIn: BoxIn = .Item(0)
If Not FSO.FolderExists(BoxIn) Then
MsgBox "Папка" + vbLf + BoxIn + vbLf + "не найдена", 16
WScript.Quit
End If
Else
MsgBox "Скрипту не указан путь обрабатываемой папки", 16
WScript.Quit
End If
End With
For Each FolderIn In FSO.GetFolder(BoxIn).SubFolders
FolderIn.Move UCase(FolderIn.Path)
Next
Создайте где-нибудь файл с расширением vbs, создайте на рабочем столе на него иконку и в проводнике затягивайте на нее обрабатываемую папку. В ней подпапки будут переименованы, не включая вложенные.BoxIn = Replace(WScript.ScriptFullName, "\" + WScript.ScriptName,"")
For Each FolderIn In CreateObject("Scripting.FileSystemObject").GetFolder(BoxIn).SubFolders
FolderIn.Move UCase(FolderIn.Path)
Next
@Echo Off
cls
Set "U=АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЬЫЪЭЮЯABCDEFGHIJKLMNOPQRSTUVWXYZ"
Set "L=абвгдеёжзийклмнопрстуфхцчшщьыъэюяabcdefghijklmnopqrstuvwxyz"
For /L %%i In (0,1,58) Do Call Set "@@%%i=%%L:~%%i,1%%=%%U:~%%i,1%%"
FOR /F "usebackq delims=" %%d IN (`2^>nul Dir /B /A:D`) DO (
Set "Name=%%d"
For /L %%i In (0,1,58) Do Call :MyRen "%%@@%%i%%"
Call Ren "%%d" "%%Name%%"
)
Pause
Exit /B
:MyRen
Call Set "Name=%%Name:%~1%%"
Exit /BСохранить в 866 кодировке, разместить в папке, где переименовываются подпапки
Обновить нельзя что - систему или Powershell?
Если что, то Powershell можно обновить и на семёрке. »
Ничего нельзя обновить. В этом и проблема.
TotalCMD: курсор на любой папке - Alt_+_+(выделится тип файлов) - Ctrl+M - выбрать в выпадающем списке ВСЕ ЗАГЛАВНЫЕ - Enter
Serguei Kouzmine
16-07-2022, 01:18
можно авм помочь ?
mkdir привет\test1
dir привет
Directory: C:\temp\привет
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 7/14/2022 9:18 PM test1
get-childitem -path '.' | where-object { $_.PSIsContainer } |
where-object { $_.name -clike '[а-я]*'} |
foreach-object {
move-item -path $_.name -destination ($_.name.ToUpper() + '.tmp' ) ;
move-item -path ($_.name.ToUpper() + '.tmp' ) -destination ($_.name.ToUpper() )
}
dir ПРИВЕТ
Directory: C:\temp\ПРИВЕТ
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 7/14/2022 9:18 PM test1
$PsVersionTable
Name Value
---- -----
CLRVersion 2.0.50727.8797
BuildVersion 6.0.6002.18111
PSVersion 2.0
WSManStackVersion 2.0
PSCompatibleVersions {1.0, 2.0}
SerializationVersion 1.1.0.1
PSRemotingProtocolVersion 2.1
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.