web-dev-qa-db-fra.com

Couper le texte dans la chaîne après/avant le séparateur dans PowerShell

Ok, voici ce que j'essaie de faire: Je veux créer un petit script PowerShell prenant chaque fichier de ma bibliothèque musicale, puis en faisant une somme de hachage et en enregistrant cela dans un fichier comme suit:

test.txt; 131 136 80 89 119 17 60 123 210 121 188 42 136 200 131 198

Maintenant, quand je commence le script, j’ai besoin de comparer d’abord ma bibliothèque de musique avec les valeurs existantes, mais pour cela, je veux juste tout couper après le; afin qu'il puisse comparer le nom de fichier au nom de fichier (ou chemin du fichier) ... mais je ne comprends pas comment le faire, j'ai essayé de le remplacer par $ name = $ name -replace "; *", "" no aller...

essayé de filtrer ... je ne sais pas comment D:

J'apprécierais vraiment l'aide.

Aussi, si vous pensez que j'utilise le mauvais langage de codage, dites-moi et ce qui serait mieux, c'est que je n'ai jamais utilisé que C et PowerShell.

8
DemonWareXT
$pos = $name.IndexOf(";")
$leftPart = $name.Substring(0, $pos)
$rightPart = $name.Substring($pos+1)

En interne, PowerShell utilise la classe String .

34
VVS
$text = "test.txt ; 131 136 80 89 119 17 60 123 210 121 188 42 136 200 131 198"

$text.split(';')[1].split(' ')
6
Sarang

Vous pouvez utiliser uneSplit:

$text = "test.txt ; 131 136 80 89 119 17 60 123 210 121 188 42 136 200 131 198"
$separator = ";" # you can put many separator like this "; : ,"

$parts = $text.split($separator)

echo $parts[0] # return test.txt
echo $parts[1] # return the part after the separator
2
hdoghmen

Cela fonctionne pour un délimiteur spécifique pour un nombre spécifique de caractères entre le délimiteur. J'ai eu beaucoup de problèmes en essayant d'utiliser ceci dans une boucle pour chaque boucle où la position a changé mais le délimiteur était le même. Par exemple, j'utilisais la barre oblique inversée comme délimiteur et je voulais uniquement utiliser tout ce qui se trouvait à droite de la barre oblique inversée. Le problème était qu’une fois la position définie (71 caractères à partir du début), elle utiliserait $ pos en tant que 71 à chaque fois, quel que soit l’emplacement du délimiteur dans le script. J'ai trouvé une autre méthode d'utilisation d'un délimiteur et d'un fichier .split pour casser les choses, puis j'ai utilisé la variable scindée pour appeler les sections. Par exemple, la première section était $ variable [0] et la deuxième section était $ variable [1].

1
David

J'avais un répertoire plein de fichiers dont certains nommés facture no-produit no.pdf et que je voulais trier par numéro de produit, alors ...

get-childitem *.pdf | sort-object -property @{expression={$\_.name.substring($\_.name.indexof("-")+1)}}

Notez qu'en l'absence d'un - cela trie par $_.name

0
Clarius