C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

フォルダ名の%文字と環境変数の判別方法は?

[トピック内 6 記事 (1 - 6 表示)]  << 0 >>

■92307 / inTopicNo.1)  フォルダ名の%文字と環境変数の判別方法は?
  
□投稿者/ ぶなっぷ (206回)-(2019/09/10(Tue) 15:15:35)

分類:[ソフトウェア全般] 

2019/09/10(Tue) 15:17:24 編集(投稿者)
「ファイル名を指定して実行」とかに、環境変数指定ってできるじゃないですか。
 (例) %Temp%   → C:\Users\administrator\AppData\Local\Tempフォルダが開く
 (例) %WinDir% → C:\Windowsフォルダが開く

これと同じことを実装したいんですが、
困ったことにフォルダ名に対して、%文字って禁則文字じゃないんですよね。

%Temp%って書かれてたときに、
環境変数のTempなのか?
フォルダ名に%Temp%っていう文字が含まれているのか?
判別するルールってあるんでしょうか。

引用返信 編集キー/
■92309 / inTopicNo.2)  Re[1]: フォルダ名の%文字と環境変数の判別方法は?
□投稿者/ Hongliang (891回)-(2019/09/10(Tue) 15:25:47)
環境変数を扱うアプリケーション次第でしょうね。
コマンドプロンプトなどは、その名前の環境変数が定義されている場合は環境変数の内容を使用し、定義されていなければ%を含む文字列と認識するようですね。
この挙動は、.NETではEnvironment.ExpandEnvironmentVariablesメソッドで再現できます。
引用返信 編集キー/
■92310 / inTopicNo.3)  Re[1]: フォルダ名の%文字と環境変数の判別方法は?
□投稿者/ 魔界の仮面弁士 (2367回)-(2019/09/10(Tue) 15:25:54)
No92307 (ぶなっぷ さん) に返信
> フォルダ名に%Temp%っていう文字が含まれているのか?
> 判別するルールってあるんでしょうか。

アプリケーションごとの実装依存ではないでしょうか。.NET 製の自作アプリの話なら、
設定画面あたりに「環境変数を展開する」かどうかのチェックボックスを設け、
Environment.ExpandEnvironmentVariables を呼び出すようにしてみるとか。
引用返信 編集キー/
■92312 / inTopicNo.4)  Re[2]: フォルダ名の%文字と環境変数の判別方法は?
□投稿者/ ぶなっぷ (207回)-(2019/09/10(Tue) 15:35:52)
みなさん、どうもです。

書きながら考えてたんですが、結局、問題になるのは、
環境変数のフォルダ、%Temp%のフォルダが双方とも存在するときに、どっちを
優先するか?だけですね。
コマンドプロンプトが、環境変数であれば、それに従うことにします。

で、それがデフォルト設定で、
> 設定画面あたりに「環境変数を展開する」かどうかのチェックボックスを設け、
もやっておけばバッチリですね。

> この挙動は、.NETではEnvironment.ExpandEnvironmentVariablesメソッドで再現できます。
便利なメソッドを教えていただいてありがとうございました。

解決済み
引用返信 編集キー/
■92325 / inTopicNo.5)  Re[3]: フォルダ名の%文字と環境変数の判別方法は?
□投稿者/ とっちゃん (634回)-(2019/09/10(Tue) 17:17:34)
No92312 (ぶなっぷ さん) に返信

ちなみに。。。 Native API はこちら。

ExpandEnvironmentStringsA/ExpandEnvironmentStringsW です。
(リンク先は A のほう)
https://docs.microsoft.com/en-us/windows/win32/api/processenv/nf-processenv-expandenvironmentstringsa

やってることは同じですけどねw

引用返信 編集キー/
■92335 / inTopicNo.6)  Re[4]: フォルダ名の%文字と環境変数の判別方法は?
□投稿者/ ぶなっぷ (209回)-(2019/09/11(Wed) 08:53:14)
ありがとうございます。
.Net版は、こいつのラップですかね。
解決済み
引用返信 編集キー/

このトピックをツリーで一括表示


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

このトピックに書きこむ