Регулярное выражение в Power Shell для преобразования символа между двойными кавычками в верхний регистр - PullRequest
1 голос
/ 02 апреля 2020

Я хочу написать скрипт powershell, который преобразует строку, присутствующую в двойных кавычках в файле, и преобразует ее в верхний регистр. Файлы помещаются в разные папки.

Я могу извлечь строку между двойными кавычками и преобразовать ее в верхний регистр, но не могу заменить ее в правильном положении.

Ex : Это входная строка.

"e" //&&'i&&

Вывод должен быть

"E" //&&'i&&

Это то, что я пробовал. Кроме того, это даже я не заменяю содержимое файла.

 $items = Get-ChildItem * -recurse
# enumerate the items array
foreach ($item in $items)
{
      # if the item is a directory, then process it.
     if ($item.Attributes -ne "Directory")
     {  
        (Get-Content $item.FullName ) |          

         Foreach-Object { 
            if (($_ -match '\"'))
            {                           
                $str = $_

                $ext = [regex]::Matches($str, '".*?"').Value -replace '"'
                $ext = $ext.ToUpper()
                Write-Host $ext
                $_ = $ext
            }
            else { }            
         } |         
         Set-Content $item.FullName
     }
}

Ответы [ 3 ]

0 голосов
/ 02 апреля 2020

Если у вас был powershell 6 или 7:

'"hi"' -replace '".*"', { $_.value.toupper() }

"HI"


'"e" //&&''i&&' -replace '".*"', { $_.value.toupper() }   

"E" //&&'i&&
0 голосов
/ 02 апреля 2020

Я могу напечатать символы верхнего регистра с кодом ниже, но файл не обновляется. В нем все еще есть старые символы, Как обновить f ie новым содержимым.

$items = Get-ChildItem *.txt -recurse
# enumerate the items array
foreach ($item in $items)
{
      # if the item is a directory, then process it.
     if ($item.Attributes -ne "Directory")
     {  
        (Get-Content $item.FullName ) |          

         Foreach-Object { 
            $str = $_
            $_ = [regex]::Replace($_, '"[^"]*"', { param($m) $m.Value.ToUpper() })
            Write-Host $_           
         } |         
         Set-Content $item.FullName 
     }
}
0 голосов
/ 02 апреля 2020

Это можно сделать. На самом деле я не следовал вашему коду, поэтому я удалил его и изменил регулярное выражение.

$items = Get-ChildItem "C:\Users\UsernameHere\Desktop\Folder123\*.txt"
# enumerate the items array
foreach ($item in $items){
      # if the item is a directory, then process it.
     if ($item.Attributes -ne "Directory"){  
        $content = (gc $item.FullName ) 
        $content = $content.replace('"\w.*"',$matches[0].ToUpper)
        $content | sc $item
     }
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...