Найти расположение символа и имя файла обновления
Какую функцию я могу использовать для поиска позиции символа в строке с помощью PowerShell 2.0.
i.e Я бы использовал CHARINDEX или PATINDEX при использовании SQL Server.
Я посмотрел на использование командлета Select-String
, но, похоже, он не делает того, что мне нужно.
В конечном счете, я ищу, чтобы найти символ "_" в имени файла и отключить все до следующего ".,
Пример имени файла 237801_201011221155.xml
Окончательное решение. Ниже приведена информация обо всех символах от < _ > до <. > для всех .xml файлов в текущем каталоге
Get-Childitem *.xml | Rename-Item -newname `
{ $_.name -replace $_.name.SubString($_.name.IndexOf("_"), `
$_.name.LastIndexOf(".") - $_.name.IndexOf("_") ),''}
В итоге получится 237801.xml
Ответы
Ответ 1
Строка представляет собой строку .NET, поэтому вы можете использовать методы .NET. В вашем случае:
$index = "The string".IndexOf(" ")
вернет 3, что является первым вхождением пространства в строке. Для получения дополнительной информации см. http://msdn.microsoft.com/en-us/library/system.string.aspx
Для вашей потребности попробуйте что-то вроде:
$s.SubString($s.IndexOf("_") + 1, $s.LastIndexOf(".") - $s.IndexOf("_") - 1)
Или вы можете использовать регулярные выражения:
if ($s -Match '(_)(.*)(\.)[^.]*$') { $matches[2] }
(должен быть скорректирован в зависимости от того, что вам нужно).
Ответ 2
Если вы разделите имя файла на подчеркивание и точку, вы получите массив из трех строк. Присоединитесь к первой и третьей строкам, то есть с индексами 0 и 2
$x = '237801_201011221155.xml'
( $x.split('_.')[0] , $x.split('_.')[2] ) -join '.'
Другой способ сделать то же самое:
'237801_201011221155.xml'.split('_.')[0,2] -join '.'
Ответ 3
Если вы работаете с фактическими файлами (в отличие от каких-то строковых данных), как насчет следующего?
$files | % { "$($_.BaseName -replace '_[^_]+$','')$($_.Extension)" }
(или используйте _.+$
, если вы хотите вырезать все, начиная с первого подчеркивания.)
Ответ 4
Если вы используете Excel, тогда команда будет Find и MID. Вот как это было бы в Powershell.
$text = "asdfNAME=PC123456<>Diweursejsfdjiwr"
asdfNAME = PC123456 < > Diweursejsfdjiwr - строка текста Randon, мы хотим PC123456
$text.IndexOf("E=")
7 - это команда "НАЙТИ" для Powershell
$text.substring(10,5)
C1234 - это команда "MID" для Powershell
$text.substring($text.IndexOf("E=")+2,8)
PC123456 - тада нашел и отредала наш текст
-RavonTUS
Ответ 5
Я знаю, что эта ветка немного устарела, но я искал что-то похожее и не мог ее найти. Вот что я придумал. Я создаю строковый объект, используя класс .NET String, чтобы выставить все методы, которые обычно обнаруживаются при использовании С#
[System.String]$myString
$myString = "237801_201011221155.xml"
$startPos = $myString.LastIndexOf("_") + 1 # Do not include the "_" character
$subString = $myString.Substring($startPos,$myString.Length - $startPos)
Результат: 201011221155.xml