Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Названия папок ПРОПИСНЫМИ буквами (http://forum.oszone.net/showthread.php?t=351539)

Sisin 13-07-2022 23:23 2988439

Названия папок ПРОПИСНЫМИ буквами
 
Помогите, пожалуйста, с батником, который менял бы название всех папок рядом с собой (не включая вложенные) на то же название только написанное прописными буквами.

Serguei Kouzmine 14-07-2022 03:06 2988445

повершел справится с задачей легко

Код:

move-item  -path 'привет' -destination ('привет'.ToUpper())
чем мучиться (про себя употребил другое слово) с батникам осваивайте уже Powershell

Sisin 14-07-2022 08:59 2988450

Цитата:

Цитата Serguei Kouzmine (Сообщение 2988445)
повершел справится с задачей легко

Код:

move-item  -path 'привет' -destination ('привет'.ToUpper())
чем мучиться (про себя употребил другое слово) с батникам осваивайте уже Powershell

Это, конечно, здорово. Я находил вариант на Powershell в инете, но задача-то другая. Мне все папки надо переименовать, не включая вложенные.

DJ Mogarych 14-07-2022 09:16 2988451

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
}


Sisin 14-07-2022 20:34 2988515

Не сработал на Windows 7, видимо powershell старый. Но обновить нельзя.
Можно ли как-то решить задачу с помощью bat?

Serguei Kouzmine 15-07-2022 03:08 2988543

как нитересно а ошибку пушкин будет показывать ?

Serguei Kouzmine 15-07-2022 03:36 2988544

Цитата:

Цитата DJ Mogarych

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 2988546

Windows нечувствителен к регистру имён, поэтому переименовывать нужно дважды.

YuS_2 15-07-2022 09:03 2988549

Цитата:

Цитата Serguei Kouzmine
как нитересно а ошибку пушкин будет показывать ? »

Да чего там показывать... 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 2988586

Цитата:

Цитата Sisin
Не сработал на Windows 7, видимо powershell старый. Но обновить нельзя. »

Обновить нельзя что - систему или Powershell?
Если что, то Powershell можно обновить и на семёрке.

megaloman 15-07-2022 15:40 2988594

Как вариант, 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

Можно, конечно, извратиться в CMD, но это тихий ужас по быстродействию и надежности
Код:

@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 кодировке, разместить в папке, где переименовываются подпапки

Sisin 15-07-2022 20:57 2988620

Цитата:

Цитата DJ Mogarych
Обновить нельзя что - систему или Powershell?
Если что, то Powershell можно обновить и на семёрке. »

Ничего нельзя обновить. В этом и проблема.

wasp14 15-07-2022 22:55 2988634

TotalCMD: курсор на любой папке - Alt_+_+(выделится тип файлов) - Ctrl+M - выбрать в выпадающем списке ВСЕ ЗАГЛАВНЫЕ - Enter

Serguei Kouzmine 16-07-2022 01:18 2988642

можно авм помочь ?

Код:

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



Время: 17:38.

Время: 17:38.
© OSzone.net 2001-