我在批处理文件中运行 powershell 命令以从文件夹名称中删除括号,但它会重命名路径中的所有文件夹,如果文件夹名称不包含括号,它会给我一个错误。
我希望它在特定文件夹上运行,并且我希望它在运行之前检查名称是否包含括号。如果名称中没有括号,它应该什么都不做。
希望保持它是一个单行命令
我已经搜索了互联网,但我找不到解决方案。
命令:
powershell -command "Dir -Path e:\test | rename-item -NewName { $_ -replace '\[','_' -replace '\]','_'}"
批处理文件使用一些参数自动运行,并且我从参数中获取要重命名的目录的确切名称。(即start.bat param1 param2)
我试图实现 IF 语句,但我就是想不通。
删除括号的原因是,模块“remove-itemsafely”不能处理带括号的名称。此模块将文件放入回收站,而不是永久删除它们。
希望有人可以帮助我,谢谢。
我建议使用这个 PowerShell 命令:
反引号作为转义字符存在。
您只要求提供文件夹名称,因此
-Directory
.如果您还想重命名层次结构中更深的目录,
c:\test\anotherFolder\
例如,只需添加-Recurse
到Get-ChildItem
命令中。尽管可以假设,但您没有指定括号将处于先开后闭的顺序。也不是两者都必然存在于文件夹名称中。保存到变量中的
这个正则表达式模式将匹配OR ,因此它将捕获所有实例。 是转义字符。 是OR 字符。 我们可以将模式用于过滤器 ( ) 块和名称替换匹配 ( ) 块。
'\]|\['
$rgx
]
[
\
|
Where-Object
-replace
最后,您似乎希望能够从批处理文件中运行它,所以我确保它以这种方式工作。
顺便说一句, the
;
是命令分隔符。首先$rgx
变量将存储模式字符串,然后将执行单行。