Яку функцію я можу використовувати, щоб знайти позицію символу в рядку за допомогою PowerShell 2.0.
тобто я б використовував CHARINDEX або PATINDEX, якщо використовую SQL Server.
Я подивився на використання Select-String
cmdlet, але вона, здається, не робить того, що мені потрібно.
Зрештою, я шукаю символ "_" у назві файлу і зняти все з наступного ".".
Приклад імені файлу 237801_201011221155.xml
Остаточне рішення. Нижче наведено всі символи від <_> до <.> Для всіх .xml-файлів у поточному каталозі
Get-Childitem *.xml | Rename-Item -newname `
{ $_.name -replace $_.name.SubString($_.name.IndexOf("_"), `
$_.name.LastIndexOf(".") - $_.name.IndexOf("_") ),""}
Буде закінчуватися 237801.xml
Відповіді:
32 за відповідь № 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 для відповіді № 2
Якщо ви розділите ім'я файлу на підкреслення та крапку, ви отримаєте масив з 3 рядків. Приєднують перший і третій рядок, тобто з індексом 0 і 2
$x = "237801_201011221155.xml"
( $x.split("_.")[0] , $x.split("_.")[2] ) -join "."
Інший спосіб зробити те ж саме:
"237801_201011221155.xml".split("_.")[0,2] -join "."
1 для відповіді № 3
Якщо ви працюєте з фактичними файлами (на відміну від деяких типів рядкових даних), як щодо наступного?
$files | % { "$($_.BaseName -replace "_[^_]+$","")$($_.Extension)" }
(або використовувати _.+$
якщо потрібно вирізати все з першого підкреслення.)
1 для відповіді № 4
Якщо ви використовуєте Excel, то командою буде Find і MID. Ось як це буде виглядати в Powershell.
$text = "asdfNAME=PC123456<>Diweursejsfdjiwr"
asdfNAME =PC123456<> Diweursejsfdjiwr - Рендон рядку тексту, ми хочемо PC123456
$text.IndexOf("E=")
7 - це команда "FIND" для Powershell
$text.substring(10,5)
C1234 - це команда "MID" для Powershell
$text.substring($text.IndexOf("E=")+2,8)
PC123456 - тоді він знайшов і розрізав наш текст
-RavonTUS
0 для відповіді № 5
Я знаю, що цей потік старий, але я бувшукали щось подібне і не могли його знайти. Ось що я придумав. Створюю строковий об'єкт, використовуючи клас .Net String, щоб розкрити всі способи, які зазвичай знаходять при використанні C #.
[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