从Powershell到Python翻译

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (66)

我正在编写一个简单的脚本,我曾经使用电影/电视节目工作/编辑一个大文件夹,我找到了一种简单的方法来删除文件夹和文件标题中的某些字符串,但它是一个PowerShell命令,我有我在Python脚本中的其余功能。

  1. 首先,我要求的人可能能够使Python等效于此PowerShell系列: Get-ChildItem -Recurse | Where-Object {$_.Name -match 'SomeString'} | Rename-Item -NewName {$_.Name -replace 'SomeString', ''}
  2. 其次,我遇到了PowerShell命令的问题,如果我想删除的字符串包含[](像这样-[Something]:) - 标题将变得不可读,我不知道为什么。
提问于
用户回答回答于

虽然双反引线方法可行,但我推荐Regex.Escape方法。如果要转义的字符串来自外部源,则安全且有用。

Regex.Escape(String) 方法

转义最小集的字符\*+?|{[()^$.#,和空白空间),通过它们的转义码替换它们。这指示正则表达式引擎按字面解释这些字符而不是元字符。

示例

$SomeString = '[square]'
$SafeString = [regex]::Escape( $SomeString )
Get-ChildItem -Recurse | 
    Where-Object { $_.Name -match $SafeString } | 
    ForEach-Object { $_ | 
        Rename-Item -NewName $($_.Name -replace $SafeString, '')  -WhatIf
    }

结果

PS D:\PShell> D:\PShell\SO\53619911.ps1
What if: Performing the operation "Rename File" on target "Item: D:\PShell\DataFi
les\some[square]file.txt Destination: D:\PShell\DataFiles\somefile.txt".
What if: Performing the operation "Rename File" on target "Item: D:\PShell\DataFi
les\some[square]file2.txt Destination: D:\PShell\DataFiles\somefile2.txt".
用户回答回答于

这解决了我的问题。

$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]。

扫码关注云+社区

领取腾讯云代金券