DOBON.NETプログラミング道掲示板
(現在 過去ログ2 を表示中)

[ 最新記事及び返信フォームをトピックトップへ ]

■33507 / inTopicNo.1)  PowerShellで文字列を変数に変換したい
  
□投稿者/ キャサリン 一般人(1回)-(2016/11/14(Mon) 12:24:54)
  • アイコン環境/言語:[PowerShell Win7] 
    分類:[その他] 

    PowerShellについてお教え願います。

    $a = '$val_1'
    $b = '$val_2'

    $val_1 = 100
    $val_2 = 200

    if($a -eq $b)...

    上記のようなコードがあります。$a,$bには文字列が入っています。

    if文で比較する時に'$val_1'を変数に変換したいのですが、可能でしょうか?

    if(100 -eq 200)...のような結果が欲しいです。よろしくお願いします。
引用返信 削除キー/
■33508 / inTopicNo.2)  Re[1]: PowerShellで文字列を変数に変換したい
□投稿者/ Hongliang 大御所(524回)-(2016/11/14(Mon) 12:52:46)
  • アイコン$aが"val_1"であれば、(Get-Variable $a).Valueで文字列から参照できますが…。

    連想配列を使うのはダメでしょうか?
    $a = "val_1"
    $b = "val_2"
    $table = @{}
    $table["val_1"] = 100
    $table["val_2"] = 200
    if ($table[$a] -eq $table[$b]) { ... }
引用返信 削除キー/
■33509 / inTopicNo.3)  Re[2]: PowerShellで文字列を変数に変換したい
□投稿者/ キャサリン 一般人(1回)-(2016/11/16(Wed) 01:01:00)
  • アイコンHongliangさん、ご回答ありがとうございます。

    お教え頂きました、(Get-Variable a).Valueでは欲しい結果がでませんでした。
    (Get-Variable a).Valueを実行したら、「$val_1」が出力されました。
    私が欲しかった結果は、$val_1に入っている「100」という数字が出力されてもらいたかったです。

    私がやりたかった事は、変数に条件を持たせ、if文の条件を簡単に変更できるようにっしたい事です。もし下記のコードが動けば、if文の条件を$a or $b or $cに変更するだけで簡単に条件を変更できるので、便利だなと思いました。

    $a = '($val_1 + $val_2) -eq 300'
    $b = '($val_1 - $val_2) -gt 400'
    $c = '($val_1 * $val_2) -lt 500'

    $val_1 = 100
    $val_2 = 200

    if($a){
    #何らかの処理
    }

    No33508に返信(Hongliangさんの記事)
    > $aが"val_1"であれば、(Get-Variable $a).Valueで文字列から参照できますが…。
    >
    > 連想配列を使うのはダメでしょうか?
    > $a = "val_1"
    > $b = "val_2"
    > $table = @{}
    > $table["val_1"] = 100
    > $table["val_2"] = 200
    > if ($table[$a] -eq $table[$b]) { ... }
引用返信 削除キー/
■33510 / inTopicNo.4)  Re[3]: PowerShellで文字列を変数に変換したい
□投稿者/ Hongliang 大御所(525回)-(2016/11/16(Wed) 06:11:14)
  • アイコン
    Invoke-Expressionとかもありますが、
    そういう用件なら文字列じゃなくてスクリプトブロックにすればどうでしょう?
    
    $a = { ($val_1 + $val_2) -eq 300 }
    $b = { ($val_1 - $val_2) -gt 400 }
    $c = { ($val_1 * $val_2) -lt 500 }
    
    $val_1 = 100
    $val_2 = 200
    
    if ( &$a ){    # &でスクリプトブロックを評価する
        #何らかの処理
    }

引用返信 削除キー/
■33522 / inTopicNo.5)  Re[3]: PowerShellで文字列を変数に変換したい
□投稿者/ 魔界の仮面弁士 大御所(1055回)-(2016/11/18(Fri) 16:21:51)
  • アイコン2016/11/18(Fri) 16:32:36 編集(投稿者)

    No33509に返信(キャサリン さんの記事)
    >> $aが"val_1"であれば、(Get-Variable $a).Valueで文字列から参照できますが…。
    > お教え頂きました、(Get-Variable a).Valueでは欲しい結果がでませんでした。
    > (Get-Variable a).Valueを実行したら、「$val_1」が出力されました。

    『$a が "val_1" であれば (Get-Variable $a).Value』という回答に対して
    『$a が "$val_1" のままで (Get-Variable a).Value』を実行したのでは…?


    $val_1 = 100
    $val_2 = 200

    $a = 'val_1'
    $b = "val_2"

    (Get-Variable a).Value #これは「val_1」
    (Get-Variable b).Value #これは「val_2」
    $a #これも「val_1」
    $b #これも「val_2」
    (Get-Variable $a).Value #これは「100」
    (Get-Variable $b).Value #これは「200」
    $val_1 = 300
    $val_2 = 400
    (Get-Variable $a).Value #これは「300」
    (Get-Variable $b).Value #これは「400」
    (Get-Variable $a).Value + (Get-Variable $b).Value #これは「700」
    (Get-Variable $a).Value -eq (Get-Variable $b).Value #これは「False」
引用返信 削除キー/
■33523 / inTopicNo.6)  Re[3]: PowerShellで文字列を変数に変換したい
□投稿者/ 魔界の仮面弁士 大御所(1056回)-(2016/11/18(Fri) 17:40:06)
  • アイコンNo33509に返信(キャサリン さんの記事)
    > もし下記のコードが動けば、if文の条件を$a or $b or $cに変更するだけで簡単に条件を変更できるので、便利だなと思いました。

    Hongliang さんが書かれていた Invoke-Expression を使ってみました。
    エイリアスである iex にて指定


    $a = '($val_1 + $val_2) -eq 300'
    $b = '($val_1 - $val_2) -gt 400'
    $c = '($val_1 * $val_2) -lt 500'

    $val_1 = 100
    $val_2 = 200

    if( (iex $a) ) { "300と一致" } else { "300と不一致" }
    if( (iex $b) ) { "400より大きい" } else { "400より大きくない" }
    if( (iex $c) ) { "500より小さい" } else { "500より小さくない" }
    if( (iex $a) -or (iex $b) -or (iex $c) ) { "真" } else { "偽" }
引用返信 削除キー/
■33525 / inTopicNo.7)  Re[4]: PowerShellで文字列を変数に変換したい
□投稿者/ キャサリン 一般人(1回)-(2016/11/18(Fri) 21:38:44)
  • アイコンHongliangさん

    ご回答ありがとうございました。スクリプトブロックで希望の事が解決しました。
    助かりました、ありがとうございます!

    > $a = { ($val_1 + $val_2) -eq 300 }
    > $b = { ($val_1 - $val_2) -gt 400 }
    > $c = { ($val_1 * $val_2) -lt 500 }
    >
    > $val_1 = 100
    > $val_2 = 200
    >
    > if ( &$a ){ # &でスクリプトブロックを評価する
    > #何らかの処理
    > }
引用返信 削除キー/
■33526 / inTopicNo.8)  Re[4]: PowerShellで文字列を変数に変換したい
□投稿者/ キャサリン 一般人(2回)-(2016/11/18(Fri) 21:44:14)
  • アイコン魔界の仮面弁士さん

    Invoke-Expressionというコマンド、知りませんでした。こちらでも希望の結果を得ることができました、ありがとうございます!

    $a = '($val_1 + $val_2) -eq 300'
    $b = '($val_1 - $val_2) -gt 400'
    $c = '($val_1 * $val_2) -lt 500'

    > $val_1 = 100
    > $val_2 = 200
    >
    > if( (iex $a) ) { "300と一致" } else { "300と不一致" }
    > if( (iex $b) ) { "400より大きい" } else { "400より大きくない" }
    > if( (iex $c) ) { "500より小さい" } else { "500より小さくない" }
    > if( (iex $a) -or (iex $b) -or (iex $c) ) { "真" } else { "偽" }
引用返信 削除キー/
■33527 / inTopicNo.9)  Re[5]: PowerShellで文字列を変数に変換したい
□投稿者/ キャサリンさん 一般人(1回)-(2016/11/18(Fri) 21:58:04)
  • アイコン皆様、ご回答ありがとうございました。助かりました!
解決み!
引用返信 削除キー/



トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

Mode/  Pass/


- Child Tree -