Перевод с Powershell на Python - PullRequest
       0

Перевод с Powershell на Python

0 голосов
/ 04 декабря 2018

Я работаю над простым сценарием, который я использовал для работы / редактирования большой папки с фильмами / ТВ-шоу, и я нашел простой способ удалить определенные строки в заголовках папок и файлов, но это команда PowerShellи у меня есть остальные мои функции в скрипте Python.

  1. Во-первых, я прошу кого-то, кто мог бы сделать Python эквивалентным этой строке PowerShell:

    Get-ChildItem -Recurse | Where-Object {$_.Name -match 'SomeString'} | Rename-Item -NewName {$_.Name -replace 'SomeString', ''}
    
  2. Во-вторых, у меня возникли проблемы с командой PowerShell, если удаляемая строка содержит [] (например: -[Something]) - заголовки станут нечитаемыми, а я 'Я не уверен, почему.

Ответы [ 2 ]

0 голосов
/ 04 декабря 2018

Это решило мои проблемы и работает для меня.Спасибо 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] из любой папки и заголовка файла в пути.

0 голосов
/ 04 декабря 2018

Хотя подход с двойным обратным трюком может сработать, я бы рекомендовал метод Regex.Escape.Безопасно и полезно, если экранируемая строка поступает из внешнего источника.

Regex.Escape(String) Метод

Escape минимальный набор символов (\, *, +, ?, |, {, [, (, ), ^, $, ., # и пробел ), заменив их кодами перехода.Это указывает механизму регулярных выражений интерпретировать эти символы буквально, а не как метасимволы.

Пример :

$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".
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...