- ベストアンサー
Power Shellの変数について
- Power Shellを使用してiniファイルから変数を読み込み、robocopyの値に代入する方法が分からず困っています。どのようなプログラムを作成すれば良いのでしょうか?
- Power Shellでiniファイルから変数を利用してrobocopyの値を設定する方法について教えてください。
- Power Shellでiniファイルから変数を読み込み、robocopyの値に代入するプログラムを作成していますが、うまく動きません。解決策を教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
evalみたいなことやれば、一応実現できるっぽいですね。 ただ、個人的にはあまり好きなやり方ではないです。 以下、=で区切るini形式で、パラメータ名をそのまま変数名にしています。 *** 以下の2ファイルを同ディレクトリに配置し、script.ps1を実行する *** *** script.ps1 *** if (test-path -pathtype Leaf .\settings.ini){ Get-Content .\settings.ini | Foreach-Object { $key, $value = $_.split('=', 2) Invoke-Expression "`$$key='$value'" } robocopy $FORDER $BK_FORDER $TXT $XLS /IS /MIR /COPYALL } else { write-host ((get-date -Format "yyyy/MM/dd HH:mm:ss.ff ") + "settings none.") exit 8 } *** settings.ini *** TXT=testsystem.txt XLS=test.xls BK_FORDER=M:\testforder FORDER=W:\bkupforder
その他の回答 (1)
- sholmes
- ベストアンサー率81% (89/109)
iniでないと駄目でしょうか? 自分もあまり詳しくないので回避策がわからないのですが、普通に「.」で読み込ませる際は.ps1拡張子が必要に思えました。 尚且つ、外部ファイル側で変数代入文を書いておくという・・・ 急ぎということですので、とりあえずパラメータ渡す部分までうまくいくものを載せておきます。 *** 以下の2ファイルを同ディレクトリに配置し、script.ps1を実行する *** *** script.ps1 *** if (test-path -pathtype Leaf .\settings.ps1){ . .\settings.ps1 robocopy $FORDER $BK_FORDER $TXT $XLS /IS /MIR /COPYALL } else { write-host ((get-date -Format "yyyy/MM/dd HH:mm:ss.ff ") + "settings none.") exit 8 } *** settings.ps1 *** $TXT = 'testsystem.txt' $XLS = 'test.xls' $BK_FORDER = 'M:\testforder' $FORDER = 'W:\bkupforder' <おまけ> 変数名はそのまま残しましたが、運用へ入る前にforderはfolderへ変更した方が良いと思います。
お礼
sholmesさん 丁寧な回答ありがとうございます。 はい、出来ればiniファイルからの読み込みで、実行したいと思っています。 ですが、ps1から実行する方法もあるのですね。 どうしても出来なければ、こちらの方法も視野に入れて考えてみたいと思います。 スペルミスのご指摘もありがとうございます。
補足
Get-Contentコマンドによる方法で、iniファイルからの変数の指定は可能でしょうか?
お礼
sholmesさん 返事が遅くなりすみません。 ご教授して頂いたソースで、想定通りの稼働を確認しました。 Get-Content以外の各コマンド等についても、 少しずつ理解しながらプログラミングの知識を深めていきたいと思います。 また何かの機会でお世話になる事があるかもしれませんが、 その時はまた宜しくお願いします。 色々と丁寧なご指導ありがとうございました。