1

私はWindows用の独自のカスタムダイアログを作成しようとしていますが、ショートカット/ wscript /とVBSを使ってできるだけ現実的なものにしています。私のエラーやダイアログの中には、ダイアログ内で%computername%変数を使用して、より現実的なものにしたいと思っています。たとえば、「ドライブC:は%computername%にフォーマットされました。 。私はVBSは、異なる構文を使用して異なる言語であることを認識働いたが、私が働いているしようとしている例はいずれもMsgBoxでVBSのコンピュータ名環境変数を使用するにはどうすればよいですか?

これは、もともと私がやってみましたものです:。

Set WshShell = WScript.CreateObject("WScript.Shell") 
x=msgbox("Windows has reformatted Drive C: on %computername% successfully.", 0+64, "Hard Disk Reformat Successful") 

明らかにそれのdidnを私は次のようになる: Using %computername% as variable

VBS環境変数を少し使って読み上げました。しかし、私が見つけた解決策のどれも働かなかった。

1. Stack Overflow

:私は私が使用したリソース、私が使用したコード、および結果の画像をリストされている - ここで

は動作しませんでした、私が使用したリソースの一部です

 Set WshShell = WScript.CreateObject("WScript.Shell") 
    dim oFso, oShell, oShellEnv, computerName, target, source 
    const overwrite = true 
    set oFso  = CreateObject("Scripting.FileSystemObject") 
    set oShell = WScript.CreateObject("WScript.Shell") 
    set oShellEnv = oShell.Environment("Process") 
    computerName = oShellEnv("ComputerName") 
    x=msgbox("Windows has reformatted Drive C: on computerName successfully.", 0+64, "Hard Disk Reformat Successful") 

enter image description here

2. Stack Overflow (different page)ss64

dim strValue 
    Set WshShell = WScript.CreateObject("WScript.Shell") 
    Set objShell = CreateObject("WScript.Shell") 
    objShell.Environment("computername") = "This is some data to share" 
    strValue = objShell.Environment("VOLATILE")("MyVariable") 
    x=msgbox("Windows has reformatted Drive C: on strValue successfully.", 0+64, "Hard Disk Reformat Successful") 

enter image description here

3. Google Groups

Set WshShell = WScript.CreateObject("WScript.Shell") 
    Set wshShell = Wscript.CreateObject("Wscript.Shell") 
    WScript.Echo "HOSTNAME: " & wshShell.ExpandEnvironmentStrings 
    ("%COMPUTERNAME%") 
    WScript.Echo "DOMAIN : " & wshShell.ExpandEnvironmentStrings 
    ("%USERDOMAIN%") 
    WScript.Echo "" 
    strServer=wshShell.ExpandEnvironmentStrings("%COMPUTERNAME%") 
    x=msgbox("Windows has reformatted Drive C: on strServer successfully.", 0+64, "Hard Disk Reformat Successful") 

enter image description here

私はここで何か間違ったことをやっていますか?誰かがこれにいくつかの光を当てることができますか?これはかなり些細な問題のように思えますし、環境変数をダイアログボックスに組み込むことができるはずです(以前はWindowsでそれを見たことがあります)。私は長い間バッチファイルを使っていましたが、比較的新しいVBSスクリプトに変換するため、私はどこか何かで本当にダムのミスを犯した場合には謝罪します。

私は実用的な解決策を探しています。私が%computername%を参照している限り、computerNameまたは変数の名前ではなく実際のローカルホスト名です。

ご協力いただきありがとうございます。

EDIT:このコードを使用して

を@Lankymartする 応答:優れている

enter image description here

ではなく、かなり私が何を望むか:

set WshShell = WScript.CreateObject("WScript.Shell") 
Set wshShell = Wscript.CreateObject("Wscript.Shell") 
WScript.Echo "HOSTNAME: " & wshShell.ExpandEnvironmentStrings("%COMPUTERNAME%") 
WScript.Echo "DOMAIN : " & wshShell.ExpandEnvironmentStrings("%USERDOMAIN%") 
WScript.Echo "" 
strServer=wshShell.ExpandEnvironmentStrings("%COMPUTERNAME%") 
x=msgbox("Windows has reformatted Drive C: on strServer successfully.", 0+64, "Hard Disk Reformat Successful") 

は私にこれを提供します。 [OK]をクリックすると、ドメインと空のボックスが表示され、strServerの元のメッセージはコンピュータ名が

になります。
+0

、あなたが最初に尋ねていない何:何をする必要がアップリテラル文字列を分割し、このような途中で変数とともに一緒にカップルの文字列を連結しています。文字列の中に変数を出力する場合は、[String Concatenation](https:// msdn。microsoft.com/en-us/library/sx97884w(v=vs.84).aspx)には[so]の例がたくさんあります。 – Lankymart

+0

将来的に[最小限で完全で検証可能なサンプルを作成する方法](http://stackoverflow.com/help/mcve)を読んでください。無駄な時間を節約できます。 – Lankymart

+0

あなたが見つけたすべての例がうまくいきました。それぞれの例を作業しなかったという意味で修正しました。例2では、​​システム環境変数に値を代入することはできません。例3では、ステートメントは複数の行と 'All Examples.'にまたがっています。文字列に変数を挿入することはできません。 – Lankymart

答えて

1

主な問題は、文字列の連結にあるようです。変数名の値を文字列リテラルに単に挿入することはできません。さんがあなたの第二の例を見てみましょう。最後の行で

Set WshShell = WScript.CreateObject("WScript.Shell") 
dim oFso, oShell, oShellEnv, computerName, target, source 
const overwrite = true 
set oFso  = CreateObject("Scripting.FileSystemObject") 
set oShell = WScript.CreateObject("WScript.Shell") 
set oShellEnv = oShell.Environment("Process") 
computerName = oShellEnv("ComputerName") 
x=msgbox("Windows has reformatted Drive C: on computerName successfully.", 0+64, "Hard Disk Reformat Successful") 

、あなたは文字列リテラルでcomputerName変数の値を含めるしようとしているが、VBScriptのは、そのように動作しません。

質問の続きです
x=msgbox("Windows has reformatted Drive C: on " & computerName & " successfully.", 0+64, "Hard Disk Reformat Successful") 
+0

これは例の1つの問題です。基本的な問題は、VBScriptの構文をよりよく理解する必要があることです。 – Lankymart

+0

@Lankymart - いいえ、すべての例の主な問題です.OPの質問の要点は、 "コンピュータ名の表示方法"です。 –

+0

すべてのサンプルに異なるエラーがあります。失敗した理由は全く異なります。 OPが試みていたこと。全体的な質問は話題にはなりません。 – Lankymart

1

following advice you have already been givenでも、この例は失敗します。複数の行が原因でエラーが発生する。

Microsoft VBScript compilation error: Expected statement

エラー。

ちょうどあなたが文は複数行にまたがることができるように行継続文字_を使用する必要があり、この

Set wshShell = Wscript.CreateObject("Wscript.Shell") 
WScript.Echo "HOSTNAME: " & wshShell.ExpandEnvironmentStrings("%COMPUTERNAME%") 
WScript.Echo "DOMAIN : " & wshShell.ExpandEnvironmentStrings("%USERDOMAIN%") 
WScript.Echo "" 
strServer=wshShell.ExpandEnvironmentStrings("%COMPUTERNAME%") 
x=msgbox("Windows has reformatted Drive C: on strServer successfully.", 0+64, "Hard Disk Reformat Successful") 

かを修正するためのステートメントごとに1行にステートメントを配置します。

また、already been pointed out in the other questionという名前の定数の代わりに数値を使用しています。


私たちはあなたが明らかにあなたは、あなたがバッチファイルを模倣しようとしているString Concatenation

strServer=wshShell.ExpandEnvironmentStrings("%COMPUTERNAME%") 
x=msgbox("Windows has reformatted Drive C: on " & strServer & "successfully.", 0+64, "Hard Disk Reformat Successful") 
+0

このコードを実装しましたが、残りのmsgboxは機能しません。また、どちらの方法でも数値を使用することはできませんか?それは重要なことか何かの違いがありますか?私は理由はわかりませんが、数字を使う方が簡単だと思われます。なぜならそうしなければ、そうしたくないのです。 – InterLinked

+0

あなたは 'WScript.Echo'を使って各文を出力しています*(' 'cscript.exe'の代わりにwscript.exe')*' MsgBox() 'と似たように生成されますが、オプションが少ないメッセージボックスです。全てのテキストと共に 'MsgBox'を1つだけ表示させたい場合は、文字列を変数に入れてから、' MsgBox() 'を呼び出すときにその変数を使います。 – Lankymart

+0

Wscript.Echoを取り除くだけでもいいですか? – InterLinked

2

を使用して行うことができ、最後の文で出力strServer変数にしたい二推測する必要はありません。 VBSは独自の方法を持っています。 VBSの方法はより信頼性があります。 https://www.microsoft.com/en-au/download/details.aspx?id=2764

 Set WshNetwork = WScript.CreateObject("WScript.Network") 
    WScript.Echo "Domain = " & WshNetwork.UserDomain 
    WScript.Echo "Computer Name = " & WshNetwork.ComputerName 
    WScript.Echo "User Name = " & WshNetwork.UserName 

あなたが持っている問題でヘルプから

は、文字列と変数が &を使用して接合する必要があります。 VB/VBS文字列内の唯一の特殊な意味は、単一のものに対して2つの引用符( "")です。それ以外のものは、C言語(バッチファイルとは別の方法)とは異なり、リテラルです。

msgbox "Windows has reformatted Drive C: on " & strServer & " Successfully." 
関連する問題