Компьютерный форум 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=329346)

sim22x 26-08-2017 20:21 2760879

Удаление первых символов в названии файла
 
Есть каталог, в котором много папок.
Папки названы в формате [любой набор символов]любой набор символов
Нужен скрипт, который удалит скобки вместе с их содержимым.

Код:

было: [раз два три]четыре пять
стало: четыре пять

В названии папки может и вовсе не быть скобок, в этом случае ничего не делать с ним.

Iska 26-08-2017 20:39 2760881

На WSH:
Скрытый текст
Код:

Option Explicit

Dim strSourceFolder

Dim objFSO
Dim objFolder


strSourceFolder = "C:\Мои проекты\0111"

Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")

If objFSO.FolderExists(strSourceFolder) Then
        With WScript.CreateObject("VBScript.RegExp")
                .Pattern = "^\[.*\](.+)$"
               
                For Each objFolder In objFSO.GetFolder(strSourceFolder).SubFolders
                        If .Test(objFolder.Name) Then
                                objFolder.Name = Trim(.Execute(objFolder.Name).Item(0).Submatches.Item(0))
                        End If
                Next
        End With
Else
        WScript.Echo "Can't find source folder [" & strSourceFolder & "]."
        WScript.Quit 1
End If

Set objFSO = Nothing

WScript.Quit 0


На всякий случай дополнительно делается «Trim()» — помнится, не все Проводники «кушали» лидирующие пробелы. Чего не делается — проверки существования папки перед переименованием.

megaloman 26-08-2017 22:19 2760891

CMD. Работает и с вложенными папками
Код:

@Echo Off

Set "FileIn=Z:\Box_In"

FOR /F "usebackq delims=" %%d IN (`Dir "%FileIn%\[*]*.*" /S /B /A:D 2^>nul^|Sort /R`) DO Call :DirIn "%%d%"
GoTo :Eof

:DirIn
        FOR /F "usebackq tokens=2 delims=]" %%i IN ('%~nx1') DO If Not "%%i"=="" (
                FOR /F "tokens=*" %%s IN ("%%i") DO Ren %1 "%%s"
        )
GoTo :Eof

На всякий случай дополнительно удаляются лидирующие пробелы. Чего не делается — проверки существования папки с новым именем перед переименованием.

Iska 28-08-2017 17:37 2761165

Цитата:

Цитата megaloman
Подсмотрел у Iska идею маски файлов »

А я теперь подсмотрел у Вас и увидел, что можно-то было обойтись и без регулярок :). Правда, не понял, зачем «sort /r».

megaloman 28-08-2017 19:43 2761183

Iska! Здесь пример дерева папок, когда нужен «sort /r». Без него не получится.

Код:

Z:\Box_In\[1234 любой набор символов]  123 любой набор символов\[любой набор символов]  любой набор символов\Soft_In
Z:\Box_In\[любой набор символов]  любой набор символов\[1234 любой набор символов]  123 любой набор символов\[любой набор символов]  любой набор символов\Test

Переименовывать приходится начиная с папок наибольшей вложенности, иначе с путями будет проблема

Iska 28-08-2017 20:03 2761186

megaloman, спасибо, теперь понятно. Я просто не «копал» на тему вложенности.


Время: 17:32.

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