我可以使用什么函数在PowerShell 2.0中查找字符串中的字符位置。
,如果使用SQL Server,我会使用CHARINDEX或PATINDEX。
我查看了使用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
结束答案 0 :(得分:33)
字符串是.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] }
(必须根据您的需要进行调整)。
答案 1 :(得分:2)
如果在下划线和点上拆分文件名,则会得到一个包含3个字符串的数组。加入第一个和第三个字符串,即索引0和2
$x = '237801_201011221155.xml'
( $x.split('_.')[0] , $x.split('_.')[2] ) -join '.'
另一种做同样事情的方法:
'237801_201011221155.xml'.split('_.')[0,2] -join '.'
答案 2 :(得分:1)
如果你正在使用实际文件(而不是某种字符串数据),那么下面呢?
$files | % { "$($_.BaseName -replace '_[^_]+$','')$($_.Extension)" }
(如果你想从第一个下划线中删除所有内容,请使用_.+$
。)
答案 3 :(得分:1)
如果您使用Excel,那么命令将是Find和MID。这是Powershell中的样子。
$text = "asdfNAME=PC123456<>Diweursejsfdjiwr"
asdfNAME = PC123456 &lt;&gt; Diweursejsfdjiwr - Randon文字行,我们要 PC123456
$text.IndexOf("E=")
7 - 这是&#34; FIND&#34; Powershell的命令
$text.substring(10,5)
C1234 - 这是&#34; MID&#34; Powershell的命令
$text.substring($text.IndexOf("E=")+2,8)
PC123456 - tada已找到并剪切了我们的文字
-RavonTUS
答案 4 :(得分:0)
我知道这个线程有点旧,但是我正在寻找类似的东西而找不到它。这就是我想出来的。我使用.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