• 締切済み

powershellの配列について

すみませんが、powershellの配列について、困っていることがあります。 下記に教えていただければと思います。 【やりたいこと】 スペースがバラバラに入っているファイルの中身を配列に格納したい。 その際、スペースを省いて数字のみ配列に入れたい 【今の状態】 > $test4 = $(Get-Content -path "C:\a.txt") > echo $test4 1 2 3 4 5 6 7 89 > write-host $test4[0] 1 > write-host $test4[1] (スペースが認識されてしまう) > write-host $test4[2] 2 【望む結果】 $test4にファイルの中身を格納する。 その後、以下の結果にしたい。 > write-host $test4[0] 1 > write-host $test4[1] 2 > write-host $test4[7] 89

みんなの回答

  • oboroxx
  • ベストアンサー率40% (317/792)
回答No.3

次のところでは、区切り文字を指定して、文字列を分割します。 http://www.oborodukiyo.info/PowerShell/v20/PS-StringSplit.aspx 空白行を削除したい場合も対応します。

  • dscripty
  • ベストアンサー率51% (166/325)
回答No.2

-Split 演算子 http://technet.microsoft.com/ja-jp/library/dd347708.aspx PS C:\> "1 2 3 4 5 6 7 89" -split "\s+" 1 2 3 4 5 6 7 89 PS C:\> 正規表現の使えない String の .Split() メソッドより使いやすいとおもう。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

split って, 使えそう?

関連するQ&A

  • powershell で配列を順次に扱うには?

    powershell で配列を順次に扱うには? $aaa = Get-ChildItem -Path "c:¥Program Files" -name として、 $aaaにプログラムファイルズの下をオブジェクト形式で退避したとします。 $aaaを見てみると、 Adobe Hidemaru Java Lhaplus Microsoft Office などが入っています。 この$aaaをインプットとして、 ForEach-Object -InputObject $aaa -Process { echo ここに何を書けば良いですか? } アウトプットが下記のように$aaaの中身になれば良いです。 Adobe Hidemaru Java Lhaplus Microsoft Office ※このプログラム自体に意味はありません。 一旦退避したオブジェクトを順次に読むテストをしたいだけです。 これができたら、 -name オプションを外して、Mode,LastWriteTime,Length,Name をそれぞれ個別に echo してみたいです。

  • powershellとiniファイル

    ps1よりiniファイルを読み込むスクリプトを作成中です。 iniファイルには以下の記載をしています。 いわゆる連想配列です。 $info = @{} $info[0] = @{ host=testest1 ip=192.168.0.0 } $info[1] = [ host=testest2 ip=192.168.0.1 } 一方、ps1は以下の通り、コードを記述しています。 $INI_PATH = @(Split-Path $script:myInvocation.MyCommand.Path -Parent).Trim() $INI_FILE = "ini_test2.ini" $INI_FULLNAME = $INI_PATH + "\" + $INI_FILE $PARAMETER = @{} Get-Content $INI_FULLNAME | %{$PARAMETER += ConvertFrom-StringData $_} $host_info = $PARAMETER.info[0] #値格納 $host_info いざ、実行すると、 「ConvertFrom-StringData : データ行 '}' の形式が '名前=値' ではありません。」、「項目は既に追加されています。」とのエラーが出ます。 どのように変えればエラーがなくなりますでしょうか。 Powershellの初歩的な質問で申し訳ないのですが、ご回答をよろしくお願いいたします。

  • powershellでの改行方法について

    テキストファイルの特定の文字列の後の改行コードをカンマに変換するbatファイルを作成しようと思っているのですがうまくいきません。 DOSで用意されているコマンドだけでは実現は難しいと思って、powershellコマンドを使っています。 実現は一つのbatファイルで行いたいのですが、どなたか実現方法を知っていましたら教えていただけませんでしょうか。 [JIKKO.bat] powershell.exe "$(Get-Content TEST.txt) -replace '★`n',','" >TEST_RESULT.txt [TEST.txt] あああ,いいい,ううう★ えええ かかか,ききき,くくく★ けけけ [TEST_RESULT.txtの理想] あああ,いいい,ううう,えええ かかか,ききき,くくく,けけけ

  • powershell で特定の文字を削除したい

    powershell でコマンドの学習をしており、どうしてもやりたいことが実現できないので御教示いただきたく存じます。 学習中のパソコンのOSはWindows 7 になります。 ■前提 以下のA.txt と B.txt と C.txt があります。  ・A.txt の中身   aaa   bbb   123   456   789  ・B.txt の中身   aaa   456  ・C.txt の中身   $PSV   $Object   A123456   123   456   789   6741 ■やりたいこと A.txt と B.txt を比較して差分結果を D.txt に出力します。 次に、D.txt の数値を行ごと削除するために C.txt を使って削除したいのですが、うまくいきません。 実行したコマンドは下記になります。 ・Powershell Compare-Object (Get-Content A.txt) (Get-Content B.txt) -PassThru | Out-File D.txt -encoding Default Get-Content D.txt | Select-String "C.txt" -NotMatch コマンドが思った動作にならないため、お知恵を拝借したいです。 よろしくお願いいたします。 追加質問: 二回に分けてコマンドを実行していますが、一回のコマンドで出来たりしますか?

  • powershell 複数の文字列を連続で検索する

    サーバのログを検索一覧の内容(正規表現で複数のキーワードをAND検索する)から順番に検索して見つかったら”○”を表示させるスクリプトを作成しておりますが、うまく出来ずアドバイスを頂きたいです。よろしくお願いいたします。 ※環境としましては、サーバから取得したログを ローカルのPCで作業しております。 powershellのバージョンは5.1です。 (検索一覧:kensakulist.txt) ^(?=.*○)(?=.*△)(?=.*□).*$ ^(?=.*○○)(?=.*△△)(?=.*□□).*$ ^(?=.*○○○)(?=.*△△△)(?=.*□□□).*$ ...... (以下作成中のスクリプト内容) # 検索一覧を配列に格納 $Look = @(Get-Content -LiteralPath kensakulist.txt -Encoding UTF8) # サーバのログ内容を変数に格納 $Log = [IO.File]::ReadAllText("C:\Users\....\Documents\script\powershell\.findlog.txt") $Ok = "○" $NG = "×" # 検索処理する foreach( $a in $Look ){ #配列を順番に検索 if( $a -match $Log){ echo $Ok; } else{ echo $Ng; } }

  • Powershellでzip圧縮が出来ない

    Powershellでzip圧縮しようとしているのですが、 ・Powershell ISEで実行すると正常に圧縮 ・コマンドプロンプトで実行すると、「圧縮(zip形式)フォルダーエラー」が発生し、圧縮できない という現象が発生しています。コマンドプロンプトで実行できるようにしたいのですが、原因がわからないので、御教示をお願いします。 ・環境 Windows XP SP3 Powershell 2.0 ・Powershellソース # 引数チェック # 引数の数が2以外の時は異常終了 if ($args.Length -ne 2 ) { write-host "引数エラー" exit 2; } # 圧縮zipファイル名 $ZipFilePath = $Args[0] # 圧縮対象ファイル名 $TargetItems = $Args[1] # 圧縮先パス存在チェック if((Test-Path (Split-Path $ZipFilePath -Parent)) -ne $True){ write-host "圧縮先パスエラー" exit 3; } # 圧縮対象ファイル存在チェック if((Test-Path ($TargetItems)) -ne $True){ write-host "圧縮対象ファイルエラー" exit 4; } # Zipファイルが存在する場合は削除 if(Test-Path -Path $ZipFilePath) { Remove-Item -Path $ZipFilePath } # Zipファイル作成 Set-Content $ZipFilePath ("PK" + [char]5 + [char]6 + ("$([char]0)" * 18)) (dir $ZipFilePath).IsReadOnly = $false # Zipファイルにファイルを投入 $shell = New-Object -com Shell.Application $zipfile = $shell.NameSpace($ZipFilePath) $archivedItems = New-Object Collections.ArrayList # 圧縮対象ファイルの数だけループ foreach($item in ($TargetItems | %{Get-Item -Path $_})) { # ファイルをZipファイルに投入。圧縮処理は非同期なので、その終了を待つ。 $archivedItems.Add($item) | Out-Null $zipfile.CopyHere($item.FullName) while($true) { if($archivedItems.Count -eq $zipfile.Items().Count) { break } Start-Sleep -Seconds 1 } } write-host "処理終了" exit 0

  • PowerShellからPowerShellを呼び出す方法

    PowerShellからPowerShellを呼び出す方法 次のバッチファイルと同等の事をPowerShellで行う方法を教えて下さい。 下記のような非常に簡易的なバッチファイルがあるとします。 ■ aaa.bat ■ echo test ■ aaa.bat ■ ■ bbb.bat ■ aaa.bat > aaa.log ■ bbb.bat ■ ■ コマンドプロンプト ■ cmd> aaa.bat ・・・ 下に「test」と出力される test cmd> bbb.bat ・・・ ファイルaaa.logに「test」と出力される ■ コマンドプロンプト ■ 同じ事をPowerShellでするとすれば ■ aaa.ps1 ■ echo "test" ■ aaa.ps1 ■ ■ PowerShellの画面から ■ PS > ./aaa.ps1 ・・・ 下に「test」と出力される test PS > ./bbb.ps1 ・・・ ファイルaaa.logに「test」と出力される ■ PowerShellの画面から ■ この時の「bbb.ps1」はどのようになりますか?

  • Powershell で []付ファイル名を変更する方法

    PowerShell で []付のファイル名を変更しようとしているのですが、 ワイルドカードのエスケープの仕様がよくわからず困っています。 以下のTest-Pathを使ったコマンドはすべて True でしたが Rename-Item (ren) では"オブジェクトは存在しませんという"エラーが出ます。うまくリネームする方法はないでしょうか? ファイル名 [].txt test-path '`[`].txt' →TRUE test-path '``[].txt' →TRUE test-path '[[]].txt' →TRUE ren '`[`].txt' 'a' →エラー ren '``[].txt' 'a' →エラー ren '[[]].txt' 'a' →エラー

  • powershellでのソート

    powershellでのソート処理に関して教えてください。 list.csv F1,F2,F3 file01.txt,c:\dirA,100kb file20.txt,c:\dirC,100kb file100.txt,c:\dirG,100kb file200.txt,c:\dirG,100kb CSVで上記の様なデータがあり、F1のデータにおいて、 ファイル名の数字部分でソートしたいのですが、 意図したソートができません。 数字を考慮してのソートってどうやればよいでしょうか。 PS c:\>Get-Content .\list.csv|ConvertFrom-CSV |Sort-Object f1 F1 F2 F3 -- -- -- file01.txt c:\dirA 100kb file100.txt c:\dirG 100kb file20.txt c:\dirC 100kb file200.txt c:\dirG 100kb file01.txt→file02.txt→file100.txt→file200.txtの並びでソートさせたいです。 よろしくお願いします。

  • PowerShellでファイルの連結方法

    PowerShellでファイルの連結をしたいと思っています。 例えば、C:\にa.csv、b.csv、c.csvがあったとします。 Get-Contentを実行すると、問題なくCSVの中身が出力されます。 次に、ネットにあったファイル結合方法を試してました。 Get-Content *.csv > output.csv 実行すると、output.csvに次々とデータが追加されて、ループ状態でどんどん増えていきます。 強制終了で終了させましたが、1回のみファイルの結合をしたいと思いますが、どのようにすればよいでしょうか?

専門家に質問してみよう