查找字符位置并更新文件名

Pix*_*ted 16 powershell powershell-2.0

我可以使用什么函数在PowerShell 2.0中查找字符串中的字符位置.

即如果使用SQL Server,我会使用CHARINDEX或PATINDEX.

我查看了使用Select-Stringcmdlet,但它似乎没有做我需要它做的事情.

最终,我希望在文件名中找到一个"_"字符,并将所有内容删除到以下"." .

示例文件名237801_201011221155.xml

最终解决方案,下面删除当前目录中所有.xml文件的所有字符,包括<_>到<.>

Get-Childitem *.xml | Rename-Item -newname `
  { $_.name -replace $_.name.SubString($_.name.IndexOf("_"), `
       $_.name.LastIndexOf(".") - $_.name.IndexOf("_") ),''}
Run Code Online (Sandbox Code Playgroud)

最终会得到237801.xml

And*_*rin 35

该字符串是.NET字符串,因此您可以使用.NET方法.在你的情况下:

$index = "The string".IndexOf(" ")
Run Code Online (Sandbox Code Playgroud)

将返回3,这是字符串中第一次出现空格.有关详细信息,请参阅:http://msdn.microsoft.com/en-us/library/system.string.aspx

为了您的需要尝试类似:

$s.SubString($s.IndexOf("_") + 1, $s.LastIndexOf(".") - $s.IndexOf("_") - 1)
Run Code Online (Sandbox Code Playgroud)

或者你可以使用正则表达式:

if ($s -Match '(_)(.*)(\.)[^.]*$') {  $matches[2] }
Run Code Online (Sandbox Code Playgroud)

(必须根据您的需要进行调整).