Показать полную графическую версию : Замена лишних пробелов в имени директорий
Помогите пожалуйста написать скрипт для замены лишних пробелов в именах директорий, для примера в папке C:\Temp
Их может быть местами 2 и более между словами. Папок порядка 30000
Одного уровня или искать и во вложенных?
Get-ChildItem C:\Temp -Recurse -Directory | Where {$_.Name -match "\s{2,}"} | Rename-Item -NewName {$_.FullName -replace "\s{2,}"," "}
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: =!"
)
|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
vBulletin v3.6.4, Copyright ©2000-2024, Jelsoft Enterprises Ltd.