wake-up-neo.net

Zeichenposition suchen und Dateinamen aktualisieren

Welche Funktion kann ich verwenden, um eine Zeichenposition in einer Zeichenfolge mithilfe von PowerShell 2.0 zu finden. 

ich würde CHARINDEX oder PATINDEX verwenden, wenn ich SQL Server verwende. 

Ich habe mir das Select-String-Cmdlet angesehen, aber es scheint nicht das zu tun, was ich brauche. 

Letztendlich suche ich nach einem "_" - Zeichen in einem Dateinamen und entferne alles auf das folgende "." . 

Beispieldateiname 237801_201011221155.xml

Endgültige Lösung: Die folgende Liste entfernt alle Zeichen von und einschließlich <_> bis <.> Für alle XML-Dateien im aktuellen Verzeichnis

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

Wird am Ende mit 237801.xml

13
Pixelated

Die Zeichenfolge ist eine .NET-Zeichenfolge, sodass Sie .NET-Methoden verwenden können. In Ihrem Fall:

$index = "The string".IndexOf(" ")

gibt 3 zurück, das ist das erste Vorkommen von Platz in der Zeichenfolge. Weitere Informationen finden Sie unter: http://msdn.Microsoft.com/en-us/library/system.string.aspx

Versuchen Sie etwas für Folgendes:

$s.SubString($s.IndexOf("_") + 1, $s.LastIndexOf(".") - $s.IndexOf("_") - 1)

Oder Sie könnten Regex verwenden:

if ($s -Match '(_)(.*)(\.)[^.]*$') {  $matches[2] }

(muss je nach Bedarf angepasst werden).

33
Anders Zommarin

Wenn Sie den Dateinamen in Unterstrich und Punkt aufteilen, erhalten Sie ein Array mit 3 Zeichenfolgen. Verbinde die erste und dritte Zeichenkette, d. H. Mit Index 0 und 2 

$x = '237801_201011221155.xml' 
( $x.split('_.')[0] , $x.split('_.')[2] ) -join '.' 

Eine andere Möglichkeit, das Gleiche zu tun:

'237801_201011221155.xml'.split('_.')[0,2] -join '.'
2
mosaic

Wenn Sie mit tatsächlichen Dateien arbeiten (im Gegensatz zu String-Daten), wie wäre es mit den folgenden?

$files | % { "$($_.BaseName -replace '_[^_]+$','')$($_.Extension)" }

(oder verwenden Sie _.+$, wenn Sie alles vom ersten Unterstrich abschneiden möchten.)

1
Bergius

Wenn Sie Excel verwenden, lautet der Befehl Suchen und MID. So würde es in Powershell aussehen.

 $text = "asdfNAME=PC123456<>Diweursejsfdjiwr"

asdfNAME = PC123456 <> Diweursejsfdjiwr - Eine zufällige Textzeile wollen wir PC123456

 $text.IndexOf("E=")

7 - Dies ist der Befehl "FIND" für Powershell

 $text.substring(10,5)

C1234 - Dies ist der "MID" -Befehl für Powershell

 $text.substring($text.IndexOf("E=")+2,8)

PC123456 - tada hat unseren Text gefunden und ausgeschnitten

-RavonTUS

1
user4279989

Ich weiß, dass dieser Thread ein bisschen alt ist, aber ich suchte nach etwas Ähnlichem und konnte es nicht finden. Hier ist was ich mir ausgedacht habe. Ich erstelle ein String-Objekt mit der .Net-String-Klasse, um alle normalerweise verfügbaren Methoden verfügbar zu machen, wenn C #

[System.String]$myString
 $myString = "237801_201011221155.xml"
 $startPos = $myString.LastIndexOf("_") + 1 # Do not include the "_" character
 $subString = $myString.Substring($startPos,$myString.Length - $startPos)

Ergebnis: 201011221155.xml

0
Ernest Correale