web-dev-qa-db-ja.com

文字位置を見つけてファイル名を更新する

PowerShell 2.0を使用して文字列内の文字位置を検索するために使用できる機能は何ですか。

つまり、SQL Serverを使用している場合はCHARINDEXまたはPATINDEXを使用します。

私はSelect-String cmdletですが、必要な処理を実行していないようです。

最終的には、ファイル名に「_」文字を見つけて、次の「。」にすべてを削除しようとしています。 。

ファイル名の例237801_201011221155.xml

最終的な解決策、以下は現在のディレクトリ内のすべての.xmlファイルの<_>から<。>までのすべての文字を取り除きます。

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

最終的に237801.xmlになります

14
Pixelated

文字列は.NET文字列なので、.NETメソッドを使用できます。あなたの場合:

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

3を返します。これは、文字列に最初に出現するスペースです。詳細については、以下を参照してください: http://msdn.Microsoft.com/en-us/library/system.string.aspx

あなたの必要性のために次のようなものを試してください:

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

または、正規表現を使用できます。

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

(必要なものに応じて調整する必要があります)。

35
Anders Zommarin

ファイル名をアンダースコアとドットで分割すると、3つの文字列の配列が得られます。最初と3番目の文字列、つまりインデックス0と2を結合します

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

同じことをする別の方法:

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

(何らかの文字列データではなく)実際のファイルで作業している場合、次のことはどうですか?

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

(または、最初のアンダースコアからすべてを削除する場合は、_.+$を使用します。)

1
Bergius

Excelを使用する場合、コマンドはFind and MIDになります。 Powershellでは次のようになります。

 $text = "asdfNAME=PC123456<>Diweursejsfdjiwr"

asdfNAME = PC123456 <> Diweursejsfdjiwr-ランダムなテキスト行、欲しいPC123456

 $text.IndexOf("E=")

7-これはPowershellの「FIND」コマンドです

 $text.substring(10,5)

C1234-これはPowershellの「MID」コマンドです

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

PC123456-テキストを見つけて切り取ったタダ

-RavonTUS

1
user4279989

私はこのスレッドが少し古いことを知っていますが、私は似たようなものを探していて見つけられませんでした。ここに私が思いついたものがあります。 .Net 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)

結果:201011221155.xml

0
Ernest Correale