#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