我正在处理一个简单的脚本,我曾经使用过/编辑带有电影/电视节目的大文件夹,并且发现了一种删除文件夹和文件标题中某些字符串的简便方法,但这是PowerShell命令并且我的其余功能都在Python脚本中。
首先,我要找一个能够制作与该PowerShell行等效的Python的人:
Get-ChildItem -Recurse | Where-Object {$_.Name -match 'SomeString'} | Rename-Item -NewName {$_.Name -replace 'SomeString', ''}
第二,如果我要删除的字符串包含[]
(例如:-[Something]
),PowerShell命令会遇到问题-标题将变得不可读,我无法理解确定原因。
答案 0 :(得分:1)
尽管可以使用双重反引号方法,但我建议使用Regex.Escape
方法。如果要转义的字符串来自外部源,则安全且有用。
转义最小字符集 (
\
,*
,+
,?
,{{ 1}},|
,{
,[
,(
,)
,^
,$
,{{1} }和空白) 他们的逃生代码。这指示正则表达式 引擎从字面上解释这些字符,而不是 元字符。
示例:
.
结果:
#
答案 1 :(得分:0)
这解决了我的问题并为我工作。感谢JosefZ展示了Regex.Escape方法的用法。
$dir = 'C:\Users\user\Desktop\folder'
CD $dir
$SomeString = '-[String.String]'
$SafeString = [regex]::Escape( $SomeString )
Get-ChildItem -Recurse | Where-Object {$_.Name -match $SafeString} | Rename-Item -NewName {$_.Name -replace $SafeString, ''}
这将从路径中的任何文件夹和文件标题中删除所有-[String.String]。