Powershellで外部テキストファイルより

このQ&Aのポイント
  • Powershellで外部テキストファイルから特定の値を取得する方法を教えてください
  • 質問者はPowershellの初心者であり、外部テキストファイルの内容を処理したいと考えています
  • 具体的には、端末のホスト名とテキストファイルのホスト名が一致する行の特定の値を取得したいとしています
回答を見る
  • ベストアンサー

Powershellで外部テキストファイルより

まだまだPowershellの初心者で勉強中です。よろしくお願いします。 下記のような記述がしてある『applist.txt』というテキストファイルがあります。 ホスト名  チーム名 abc123  ponpon666 12def456  gekogeko777 ghi78912  fufufu888 Powershellで、まず端末のホスト名を取得し、その値と、上記の『C:\share』というフォルダの中にあるテキストのホスト名と一致した行にある値を表示したいのです。 外部テキストは、他の作業でも使用するため編集はできません。 作ってみたものは、   $result = ipconfig /all $hostname = $result[6].split(":")[1].Trim()  Select-String $hostname -Path C:\share\applist.txt  として、  ホスト名がghi78912という名前のPCのPowershell ISEで実行したところ  C:\share\applist.txt:3:ghi78912 fufufu888 と1行分が出てしまいます。 これをチーム名のfufufu888だけが取得できるようにするには、どのようにすると良いのか、教えていただけませんでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
  • sholmes
  • ベストアンサー率81% (89/109)
回答No.2

すみません、さっきのだとチーム名がたまたまホスト名と同じような時も引っかかっちゃいますね。 ということで、こちらのほうが少し安全でしょうか gc -Encoding String c:\share\applist.txt | foreach{$hostname, $teamname = $_ -split('  ', 2); if($hostname -eq $(hostname)){echo $teamname; break}}

ponpokotonton
質問者

お礼

欲しい情報の取得が出来ました。 丁寧な回答をありがとうございます。これも、確かに全員で使用するPCはわかりやすいようにホスト名=チーム名にしているものもあります。 foreachはforeach-objectと違うのだということも、あらためていろいろ調べて読んでみて良くわかりました(同じだと思っていました汗) ありがとうございました。

その他の回答 (1)

  • sholmes
  • ベストアンサー率81% (89/109)
回答No.1

ホスト名とチーム名の区切りが「半角スペース+全角スペース」に見えますが、間違い無いでしょうか だとしたら、文字コード指定しつつ全角スペースで区切ってしまうのが早い気はします。 PowerShellは自分もたまに触るぐらいなのですが、とりあえず動いたものを載せておきます。 applist.txtがShift_JISでなければ、「oem」を変えて下さい (Select-String -Path c:\share\applist.txt -Pattern $(hostname) -SimpleMatch -List -Encoding oem).line.split(' ')[1] 各種パラメータ等は適宜調整してみて下さい

ponpokotonton
質問者

お礼

確かに、いろいろな人がこのテキストを編集するので、全角スペースと半角スペースが入っているときがあるので、全角スペースで区切るという方法があるんですね。

関連するQ&A

  • 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で、以下のデータ(CSVファイル)を読み込み、"Data"の値が変わるときに 改行を入れてテキスト出力したいですが、可能でしょうか? (Data毎に区切り(改行)をいれ、視覚的に見やすくしたいのが目的です) CSVファイル Data Name ---- ----- Data1 file1.txt Data1 file1.txt Data2 file1.txt Data2 file1.txt Data2 file3.txt Data2 file1.txt Data3 file3.txt Data3 file3.txt Data3 file2.txt Data3 file2.txt 出力テキスト Data Name ---- ----- Data1 file1.txt Data1 file1.txt Data2 file1.txt Data2 file1.txt Data2 file3.txt Data2 file1.txt Data3 file3.txt Data3 file3.txt Data3 file2.txt Data3 file2.txt 以上、よろしくお願いします。

  • リストを読み込んでファイル名を書換るバッチファイル

    バッチファイル(test.bat)で、 変更前のファイル名が1行に1つずつ書かれたテキストファイル1(no1.txt)と 変更後のファイル名が1行に1つずつ書かれたテキストファイル2(no2.txt) を読み込んで、 no1.txtのn行目のファイル名のファイルを、 no2.txtのn行目のファイル名に書き換える バッチファイルを作りたいのですが、 (n=1,2,3,4…行数) どのように記述すればよいでしょうか。 具体的には、 フォルダAに 123.txt 456.txt 789.txt というファイルが入っていたとして、 no1.txtのファイルには、 123.txt 456.txt 789.txt no2.txtのファイルには、 ABC.txt DEF.txt GHI.txt が書かれていて、 test.batを実行すると、 フォルダAの中のファイル名が 123.txt => ABC.txt 456.txt => DEF.txt 789.txt => GHI.txt というようにリネームされるようにしたいです。 よろしくお願いします。(Windows10)

  • PowerShellでTXTを1行ごと読込んで処理

    PowerShellでの処理で教えてください。 C:\list\loglist.txtというファイルに、 C:\Documents and Settings\mama\My Documents\Shell\log C:\share\LOGS C:\diaglog というように、ログフォルダまでのパスが書いてあるファイルがあり、この中身は、時々変更されます。 このテキストを1行ずつ読み込みながら、各フォルダの配下にあるサブフォルダを含めたフォルダ内に、.logというファイルがあり、そのファイルサイズが0でなければ、ファイルを別フォルダへコピーして、元のファイルは削除するということを行いたいのです。 そこで、下記のようなスクリプトを書いてみましたが、エラーとなってしまいます。 $day = Get-Date -format yyyyMMdd $LOGPATH = "C:\list\loglist.txt" $txt = Get-Content $LOGPATH $sr = New-Object System.IO.StreamReader($txt, [System.Text.Encoding]::UTF8) while (($line = $sr.ReadLine()) -ne $null) { #0じゃないログを取得 $fname = Get-ChildItem -path $ff -Recurse | Where-Object {$_.Length -gt 0} # ログをバックアップフォルダへコピーしてリネーム     ・     ・     ・     ・ この#0じゃないログを取得にまで至らず、エラーがでます。 エラーは New-Object : "2" 個の引数を指定して ".ctor" を呼び出し中に例外が発生しました: "指定されたパスのフォーマットはサポートされていません。" 発生場所 行:×× 文字:×× + $sr = New-Object <<<< System.IO.StreamReader($txt, [System.Text.Encoding]::UTF8) + CategoryInfo : InvalidOperation: (:) [New-Object]、MethodInvocationException + FullyQualifiedErrorId : ConstructorInvokedThrowException,Microsoft.PowerShell.Commands.NewObjectCommand [System.Object[]] に 'ReadLine' という名前のメソッドが含まれないため、メソッドの呼び出しに失敗しました。 発生場所 行:×× 文字:×× + while (($line = $sr.ReadLine <<<< ()) -ne $null) + CategoryInfo : InvalidOperation: (ReadLine:String) []、RuntimeException + FullyQualifiedErrorId : MethodNotFound パスを呼び出す元になっている『C:\list\loglist.txt』は、他の担当者が作成したものですが、パスの最後に\を入れても変わりませんでした。 PowerShellISEで、$line だけを実行すると、パスはテキストの1行目のC:\Documents and Settings\mama\My Documents\Shell\logが取得できています。 コードはhttp://codezine.jp/article/detail/3592?p=2を参考に作ってみたのですが、まだまだ初心者のためどこを修正すればいいのかわからず途方にくれています。 コードの修正か、もしくは、もっと別な方法などありましたら、ご教授をお願いします。

  • テキストファイルのデータの追加

    二つのテキストファイルを結合というより新規のデータだけを追加したいのですが、そのようなコマンドはあるのでしょうか? 今は copy a.txt+b.txt c.txt copy c.txt b.txt を動かした後、テキストbを開いてテキストaとテキストbの重複しているデータを手作業で消しています。 また、上の2行のコマンドを1行にすることは可能でしょうか?

  • FLASH8 外部テキストファイルの読み込みについて

    外部テキストファイルの読み込みを参考資料などを見ていると、下記のような形式で読み込みを行っているのですが。 a.txt --------------------- 任意の変数名1=値 任意の変数名2=値 任意の変数名3=値 --------------------- 下記のようなテキストファイルを読み込むことは可能でしょうか? a.txt --------------------- 2<>名前<>メールアドレス<>画像.jpg<> 1<>名前<>メールアドレス<>画像.jpg<> --------------------- ※最初の1文字目は連番の数字です 前文の方の読み込みは成功しておりますが、下の内容については、どうすればよいかわかりません・・・ 読み込みができるのであれば、各行はsplitで配列に格納したいと思っています。 どうぞよろしくお願いいたします。

    • ベストアンサー
    • Flash
  • テキストファイルの編集

    以前にもperlでのプログラミングについて質問させて頂いた者です。 前回と被る所があるのですがちょっと複雑で、私の手に負えないので質問させて頂きます。 よろしくお願いします。 データファイルAからデータを取得して、テキストファイルBの内容の一部を取得したデータで書き換えるという操作を行うプログラムを作りたいです。 具体的には、 データファイルA[A.txt]の中身 100 111  200 222 300 333 400 444 テキストファイルB[B.txt] 1st step 文字列1 start="123" end="134" 2nd step 文字列2 start="234" end="245" 3rd step 文字列3 start="345" end="356" 4th step 文字列4 start="456" end="467" という二つのファイルを読み込み、B.txtの""で囲まれた部分を、A.txtで取得したデータで置き換えるような操作を行いたいのですが・・。 A.txtの一行目で取得したデータをB.txtの1stステップの始まりと終わりの値として置き換え、それを二行目は2ndと同様の操作を行うようなプログラムを作りたいです。 もともとこのような操作を行いたくて前回のような質問をし、それを参考にし今日まで考えましたがやはり難しく、また頼りたいと思います。。 どうかよろしくお願いします。

    • ベストアンサー
    • Perl
  • FLASH ダイナミックテキスト 外部ファイル

    初めまして。 現在外部ファイル(mNO.txt 内容:a=1&b=2&c=3&d=4&e=5)を アクションスクリプト(レイヤーにloadVariablesNum("mNO.txt", 0);)で読み込み、 外部ファイルに書き込まれている値をダイナミックテキストで表示させたいのですが、 外部ファイルは読み込まれますが、変数の値がうまく表示されません。 方法は、 テキスト入力をして、これをダイナミックテキストに変換・変数(no1)を設定し、シンボルに変換(ムービークリップ)、 レイヤーに上のアクションスクリプトを入力。 ムービークリップにアクションスクリプト、 (onClipEvent (load) { no1 = a + "号室"; }) を入力。 以上です。 デバッグすると 左上に _lebel0. L_lebel0.instance1 のように表示されますが関係あるのでしょうか。 バージョンは6です。 説明が下手で申し訳ございません。 よろしくお願いします。

    • ベストアンサー
    • Flash
  • 二つのテキストファイルを行単位で交互に一つに

    10000行のテキストファイルが二つあります。 二つのテキストファイルの内容を行単位で交互に結合させて一つのテキストファイルにまとめたいのですが 例えると下記のようにしたいです。 二つのテキストファイルA.txtとB.txtがあるとします。 ---------------------------------------------- A.txt ああああああああああああああ ささささささささささささささささ ななななななななななななななな ------------------------------------------------ ------------------------------------------------ B.txt かかかかかかかかかかかかかか たたたたたたたたたたたたたた はははははははははははははは ----------------------------------------------- A.txtとB.txtの内容を行単位で交互に一つのテキストファイルとしてC.txtのように保存したいです。 ----------------------------------------------- C.txt ああああああああああああああ かかかかかかかかかかかかかか ささささささささささささささささ たたたたたたたたたたたたたた ななななななななななななななな はははははははははははははは ---------------------------------------------- 検索して調べてみたのですが Pasteコマンドで実現させる方法を試してみたのですが うまくいかず、もしかしたらWindowsにもともと備わっていない機能なのではないかと思い検索したらbusybox64.exeを ダウンロードしてインストールしようと思いましたが コマンドプロンプトにbusybox64.exe --installを 入力してみますとうまく生きました。 busyboxを使わずに行単位で交互にテキストファイルを結合させる方法も知りたいです。 よろしくお願い致します。 返答をお待ちしております。

  • テキストファイル内の任意の単語を含む一行を削除させたい

    メインのテキストファイルを別のテキストファイルに記述されたキーワードに合致する行を削除したいのです。 例:honbun.txtの内容が むかしむかし、あるところに お爺さんと お婆さんが 住んでいました。 ある日、お爺さんは 山へ芝刈りに キーワードリスト:key.txt が むかし お爺さん 芝刈り である時、結果を result.txt に書き出すとして お婆さんが 住んでいました。 という結果を導きたいのです。 コマンド処理をしたいので、プログラム名を ABC.exeと仮定して >abc.exe honbun.txt key.txt result.txt のようなコマンドラインで処理できるようなプログラムを考えています。 オーサリングツールとしてVC++.net があるのですが、あいにくプログラミングの知識が乏しいため、こんな簡単なプログラムも出来ません。 どなたかお力添えいただければ幸いです。

専門家に質問してみよう