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

#windows #powershell #batch-file #cmd

#Windows #powershell #пакетный файл #cmd

Вопрос:

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

 c:/folder/[Hello]folder1
c:/folder/fol[Hi]der2
c:/folder/[World]  Folder3
 

Результат, который я хочу получить, выглядит следующим образом

 c:/folder/folder1
c:/folder/folder2
c:/folder/Folder3
 

Я пробовал что-то, как показано ниже, но не смог это исправить.

 for /d %%i in (*.*) do for /f "delims=][" %%j in ("%%~i") do if "%%~i" neq "%%~j" echo ren "%%~i" "%%~j"
 

и

 @ECHO OFF
SETLOCAL EnableDelayedExpansion
FOR %%D IN ("*[*]*") do (
  SET name=%%~nxD
  echo "%%D"
)
 

Ответ №1:

Для этого можно использовать Rename-Item командлет PowerShell с оператором -replace регулярных выражений:

 Get-ChildItem C:folder |Rename-Item -NewName {$_.Name -replace 's*[[^[]] ]s*'}
 

Это приведет к удалению пар скобок и их содержимого, а также любых пробелов, окружающих их.

Вы можете добавить -WhatIf переключатель для проверки результирующих имен перед выполнением:

 Get-ChildItem C:folder |Rename-Item -NewName {$_.Name -replace 's*[[^[]] ]s*'} -WhatIf