/ / Trouver la position du personnage et mettre à jour le nom du fichier - powershell, powershell-v2.0

Trouver la position du personnage et mettre à jour le nom du fichier - powershell, powershell-v2.0

Quelle fonction pourrais-je utiliser pour rechercher une position de caractère dans une chaîne à l'aide de PowerShell 2.0.

Je voudrais utiliser CHARINDEX ou PATINDEX si vous utilisez SQL Server.

J'ai regardé en utilisant le Select-String mais elle ne semble pas faire ce que j’ai besoin de faire.

En fin de compte, je "cherche un caractère" _ "dans un nom de fichier et je supprime tout le texte en". ".

Exemple de nom de fichier 237801_201011221155.xml

Solution finale, la section ci-dessous supprime tous les caractères compris entre <_> et <.> Pour tous les fichiers .xml du répertoire en cours.

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

Va finir avec 237801.xml

Réponses:

32 pour la réponse № 1

La chaîne est une chaîne .NET, vous pouvez donc utiliser des méthodes .NET. Dans ton cas:

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

retournera 3, qui est la première occurrence d'espace dans la chaîne. Pour plus d'informations, voir: http://msdn.microsoft.com/en-us/library/system.string.aspx

Pour votre besoin, essayez quelque chose comme:

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

Ou vous pouvez utiliser les expressions rationnelles:

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

(doit être ajusté en fonction de ce dont vous avez besoin).


2 pour la réponse № 2

Si vous divisez le nom de fichier en traits de soulignement et en points, vous obtenez un tableau de 3 chaînes. Joignez la première et la troisième chaîne, c’est-à-dire avec les index 0 et 2

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

Une autre façon de faire la même chose:

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

1 pour la réponse № 3

Si vous travaillez avec des fichiers réels (par opposition à une sorte de données de chaîne), que diriez-vous de ce qui suit?

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

(Ou utiliser _.+$ si vous voulez tout couper du premier trait de soulignement.)


1 pour la réponse № 4

Si vous utilisez Excel, la commande sera Find et MID. Voici à quoi cela ressemblerait dans Powershell.

 $text = "asdfNAME=PC123456<>Diweursejsfdjiwr"

asdfNAME =PC123456<> Diweursejsfdjiwr - Ligne de texte Randon, nous voulons PC123456

 $text.IndexOf("E=")

7 - Ceci est la commande "FIND" pour Powershell

 $text.substring(10,5)

C1234 - ceci est la commande "MID" pour Powershell

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

PC123456 - tada il a trouvé et a coupé notre texte

-RavonTUS


0 pour la réponse № 5

Je sais que ce fil est un peu vieux mais j’étaischerche quelque chose de similaire et ne peut pas le trouver. C’est ce que j’ai trouvé. Je crée un objet string en utilisant la classe .Net String pour exposer toutes les méthodes normalement trouvées avec C #

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

Résultat: 201011221155.xml