Powershell 查找字符位置并更新文件名
我可以使用什么函数使用PowerShell 2.0查找字符串中的字符位置 i、 如果使用SQL Server,我将使用CHARINDEX或PATINDEX 我考虑过使用Select-String cmdlet,但它似乎没有达到我所需要的效果 最终,我希望在文件名中找到一个uu字符,并将所有内容剥离到以下内容 示例文件名237801_2010112155.xml 最后一个解决方案是,下面将删除当前目录中所有.xml文件中的所有字符,并将其包括到Powershell 查找字符位置并更新文件名,powershell,powershell-2.0,Powershell,Powershell 2.0,我可以使用什么函数使用PowerShell 2.0查找字符串中的字符位置 i、 如果使用SQL Server,我将使用CHARINDEX或PATINDEX 我考虑过使用Select-String cmdlet,但它似乎没有达到我所需要的效果 最终,我希望在文件名中找到一个uu字符,并将所有内容剥离到以下内容 示例文件名237801_2010112155.xml 最后一个解决方案是,下面将删除当前目录中所有.xml文件中的所有字符,并将其包括到 Get-Childitem *.xml | Rena
Get-Childitem *.xml | Rename-Item -newname `
{ $_.name -replace $_.name.SubString($_.name.IndexOf("_"), `
$_.name.LastIndexOf(".") - $_.name.IndexOf("_") ),''}
将以237801.xml结束该字符串是一个.NET字符串,因此您可以使用.NET方法。就你而言:
$index = "The string".IndexOf(" ")
将返回3,这是字符串中第一个出现的空格。有关更多信息,请参阅:
根据您的需要,尝试以下方法:
$s.SubString($s.IndexOf("_") + 1, $s.LastIndexOf(".") - $s.IndexOf("_") - 1)
或者您可以使用regexps:
if ($s -Match '(_)(.*)(\.)[^.]*$') { $matches[2] }
必须根据您的具体需要进行调整。如果您使用的是实际文件,而不是某种字符串数据,那么以下内容如何
$files | % { "$($_.BaseName -replace '_[^_]+$','')$($_.Extension)" }
如果要从第一个下划线中删除所有内容,请使用“.+$”。如果使用Excel,则命令将为Find和MID。下面是Powershell中的命令
$text = "asdfNAME=PC123456<>Diweursejsfdjiwr"
7-这是Powershell的FIND命令
$text.substring(10,5)
$text.substring($text.IndexOf("E=")+2,8)
C1234-这是Powershell的MID命令
$text.substring(10,5)
$text.substring($text.IndexOf("E=")+2,8)
PC123456-tada它找到并剪切了我们的文本
-RavonTUS如果将文件名拆分为下划线和点,则会得到一个由3个字符串组成的数组。连接第一个和第三个字符串,即索引为0和2
$x = '237801_201011221155.xml'
( $x.split('_.')[0] , $x.split('_.')[2] ) -join '.'
做同样事情的另一种方法:
'237801_201011221155.xml'.split('_.')[0,2] -join '.'
我知道这条线有点旧,但我在找类似的东西,却找不到。这是我想到的。我使用.NETString类创建了一个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)
结果:201011215.xml为建议干杯。我会将代码添加到不断增长的Powershell工具箱中,不客气。我确实认为Get-Childitem*.xml | Rename-Item-NewName{$$\.BaseName-replace'.[^.]+$',$$$\.Extension}比.Substring/.IndexOf解决方案看起来更容易。请看,如果一致意见是否定的,他们不应该这样做@安德烈亚斯·尼德米尔这个问题已经4岁了!我是一名正式的亡灵巫师:同样值得注意的是变量的语法:例如$path=get location$path.IndexOf\