Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell 查找字符位置并更新文件名_Powershell_Powershell 2.0 - Fatal编程技术网

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

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

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

i、 如果使用SQL Server,我将使用CHARINDEX或PATINDEX

我考虑过使用Select-String cmdlet,但它似乎没有达到我所需要的效果

最终,我希望在文件名中找到一个uu字符,并将所有内容剥离到以下内容

示例文件名237801_2010112155.xml

最后一个解决方案是,下面将删除当前目录中所有.xml文件中的所有字符,并将其包括到

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\