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

boot2k3 18-10-2016 16:12 2679435

Замена лишних пробелов в имени директорий
 
Помогите пожалуйста написать скрипт для замены лишних пробелов в именах директорий, для примера в папке C:\Temp
Их может быть местами 2 и более между словами. Папок порядка 30000

Iska 18-10-2016 16:59 2679455

Одного уровня или искать и во вложенных?

Kazun 18-10-2016 17:01 2679458

Код:

Get-ChildItem C:\Temp -Recurse -Directory | Where {$_.Name -match "\s{2,}"} | Rename-Item -NewName {$_.FullName -replace "\s{2,}"," "}

Iska 18-10-2016 17:19 2679467

Kazun, Get-ChildItem сначала выберет всё, и только затем передаст объекты по конвейеру? Если так, то не случится ли так, что родительский каталог сменит имя, а дочерние не будут обработаны зараз?

Update: так и есть.

megaloman 18-10-2016 19:10 2679493

Скрипт удаляет все пробелы в наименованиях папок (спасибо замечанию Iska-я не до конца осознал проблему)
Код:

@Echo Off

Set "InDir=С:\Temp"

SetLocal EnableExtensions EnableDelayedExpansion
For /F "usebackq delims=" %%D In (`Dir "%InDir%" /B /S /A:D 2^>nul^|Sort /R`) Do (
        Set "DirName=%%~nxD"
          Ren "%%D" "!DirName: =!"
)


Iska 18-10-2016 20:06 2679517

Цитата:

Цитата megaloman
|Sort /R »

Логично, коллега!

Только с заменой Вы переборщили ;) — надо не убирать все пробелы, а вместо нескольких оставлять единственный.

megaloman 18-10-2016 21:53 2679576

Этот скрипт оставляет в наименованиях папок не более одного пробела. Каюсь за недостаточно внимательное отношение к условию задачи
Код:

@Echo Off

Set "InDir=С:\Temp"

SetLocal EnableExtensions EnableDelayedExpansion
For /F "usebackq delims=" %%D In (`Dir "%InDir%" /B /S /A:D 2^>nul^|Sort /R`) Do (
        Set "DirName=%%~nxD"
        Call :Replace
          Ren "%%D" "!DirName!"
)
GoTo :Eof

:Replace
        Set "iDirName=!DirName!"
        Set "DirName=!DirName:  = !"
        If Not "!iDirName!"=="!DirName!" GoTo :Replace
GoTo :Eof



Время: 22:44.

Время: 22:44.
© OSzone.net 2001-