PDA

Показать полную графическую версию : Замена лишних пробелов в имени директорий


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

Iska
18-10-2016, 16:59
Одного уровня или искать и во вложенных?

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

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

Update: так и есть.

megaloman
18-10-2016, 19:10
Скрипт удаляет все пробелы в наименованиях папок (спасибо замечанию 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
|Sort /R »
Логично, коллега!

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

megaloman
18-10-2016, 21:53
Этот скрипт оставляет в наименованиях папок не более одного пробела. Каюсь за недостаточно внимательное отношение к условию задачи @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




© OSzone.net 2001-2012