web-dev-qa-db-ja.com

PowerShellのセパレータの後/前の文字列のテキストを切り取ります

わかりましたので、ここで私がやろうとしていることです:私の音楽ライブラリの各ファイルを取得し、それのハッシュ和を行い、それをファイルに書き込む小さなpowershellスクリプトを作成したいです:

test.txt; 131136 80 89119 17 60123210121188 42136200131198

今、スクリプトを開始するときに、既存の値と音楽ライブラリを最初に比較する必要がありますが、このためには、以降のすべてを切り取りたいだけです。ファイル名(またはファイルパス)とファイル名を比較できるように...しかし、その方法に困惑しているので、$ name = $ name -replace "; *"、 "" no go ...

フィルタリングしようとした...どのようにDを知らない:

本当に助かります。

また、間違ったコーディング言語を使用していると思われる場合は、教えてください、何が良いでしょうか、それはCとPowerShellのみを使用したことです

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

内部的に、PowerShellは Stringクラス を使用します。

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

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

Splitを使用できます:

$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

これは、区切り文字間の特定の文字数の特定の区切り文字に対して機能します。位置は変わったが区切り文字が同じであるfor eachループでこれを使用しようとすると、多くの問題が発生しました。たとえば、区切り記号としてバックスラッシュを使用していましたが、バックスラッシュの右側にあるものだけを使用したかったのです。問題は、位置が定義されると(最初から71文字)、区切り文字が実際にスクリプトのどこにあるかに関係なく、毎回$ posを71として使用することでした。区切り文字と.splitを使用して別の方法を見つけ、分割変数を使用してセクションを呼び出しました。たとえば、最初のセクションは$ variable [0]で、2番目のセクションは$ variable [1]でした。

1
David

私はinvoice no-product no.pdfという名前のファイルを含むファイルでいっぱいのディレクトリを持っていて、製品noで並べ替えたいので...

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

-がない場合、これは$_.nameでソートします。

0
Clarius