1

Windows için kendi özel iletişim kutularını oluşturmaya çalışıyorum; bunları mümkün olduğunca gerçekçi hale getirmek için kısayollar/wscript/ve VBS kullanarak sıfırdan oluşturmaya çalışıyorum. Bazı hatalar/diyaloglarım için, %computername% değişkenini daha gerçekçi görünmesini sağlamak için bir iletişim kutusunda kullanmak istiyorum - "Sürücü C: %computername% üzerinde biçimlendirilmiş" Bu değişkenleri daha önce toplu iş dosyalarıyla kullanmıştım ve her zaman . Ben VBS, farklı sözdizimi ile farklı bir dil olduğunu fark çalıştı ama ben çalıştım denedi örneklerin hiçbiriVBS'de Bilgisayar Adı Ortam Değişkeni MsgBox ile nasıl kullanabilirim?

Bu başlangıçta ben yapıyor çalıştı budur.

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

Açıkçası etmedim Çalışmıyor ve aşağıdakileri elde ediyorum: Using %computername% as variable

VBS enviornment değişkenlerini biraz kullanarak okudum. Ama bulduğum çözümlerin hiçbiri işe yaramadı.

1. Stack Overflow

: Ben kullanılan kaynak, ben kullanılan kodlar ve sonuç resmini listeledik - İşte

işe yaramadı kullandığım kaynakların bazılarıdır
 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) ve ss64

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

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

Burada yanlış mı yapıyorum? Bu konuda biraz ışık tutabilir mi? Bu oldukça önemsiz bir konu gibi gözüküyor ve ortam değişkenlerini bir iletişim kutusuna entegre edebilmeniz gerektiğini hissediyorum (daha önce Windows'da yerel olarak gördüm.) Uzun bir süredir toplu iş dosyaları ile çalışıyorum ama nispeten yeni VBS komut dosyası için ben herhangi bir yerde ya da bir şey gerçekten aptal bir hata yaptı, ben herhangi bir çalışma çözümü için arıyorum bir özür dilerim, özür dilerim. Bilgisayar adı veya değişkenin adı yerine gerçek yerel ana bilgisayar adı olan% computername% değerini gördüğümde, bu harika.

Yardımlarınız için şimdiden teşekkür ederiz!

DÜZENLEME: Tepki bu kodu kullanarak

@Lankymart için:

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") 

bana bu verir:

iyi değil ama ne istediğim ise

enter image description here

. Tamam'ı tıklatırsam, etki alanını ve sonra boş bir kutuyu, sonra da özgün iletimin computername öğesinin

+0

, başlangıçta sorulan değil ne: Ne yapmak gerekir yukarı değişmez dize kırmak ve bunun gibi ortada değişkeni ile birlikte birlikte birkaç dizeleri bitiştirmek olduğunu. Bir dizginin içindeki değişkenleri çıkarmak isterseniz, [String Birleştirme] kullanın (https: // msdn.microsoft.com/en-us/library/sx97884w(v=vs.84).aspx) üzerinde çok sayıda örnek var. – Lankymart

+0

Gelecekte lütfen [Minimal, Tam ve Doğrulanabilir bir örnek nasıl oluşturulur?] (Http://stackoverflow.com/help/mcve) okuyun, kendinizi ve bize çok fazla zaman harcamış olursunuz. – Lankymart

+0

Bulunduğunuz tüm örnekler işe yaradı, sadece bunların her birini çalışmadıkları anlamına gelmeyecek şekilde değiştirdiniz, 'Örnek 2.' sistem ortam değişkenlerine değerler atayamazsınız, 'Örnek 3.' deyim, birden çok satırı ve 'Tüm Örnekler 'ifadesini kapsar, değişkenleri dizeleri halinde birleştiremezsiniz. – Lankymart

cevap

1

Ana sorununuz dizgi birleştirme ile görünüyor. Bir değişkenin değerini sadece bir dize değişmezine "ismini" kullanarak "enjekte edemezsiniz". senin ikinci örneğe bakalım: Geçen satırda

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") 

, sen sabit dize computerName değişkenin değerini içerecek şekilde çalışıyorsanız, ancak VBScript bu şekilde çalışmaz.

soruya bir devamıdır
x=msgbox("Windows has reformatted Drive C: on " & computerName & " successfully.", 0+64, "Hard Disk Reformat Successful") 
+0

Bu, örneklerden biriyle ilgili bir sorundur. Temel sorun, VBScript sözdizimini daha iyi anlamak zorundadır. – Lankymart

+0

@Lankymart - Hayır, bu tüm örneklerle ana meseledir ve OP'nin sorusunun zekası "bilgisayar adını nasıl görüntüleyebilirim?" –

+0

Tüm örnekler farklı hatalara sahiptir, başarısız olmadıklarından tamamen farklıdır. OP ne denedi? Bütün soru konu dışı. – Lankymart

1

olması gerektiğini bildiririm. following advice you have already been given değilsiniz, çünkü bu örnekte tek bir açıklama yayıldığından başarısız olur Birden çok satır neden

.

Sadece bu

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") 

düzeltmek için deyimi başına bir satırda ifadeleri yer veya cümle birden fazla satıra izin vermek için bir satır devam karakteri (_) kullanmak gerekir.

Ayrıca, already been pointed out in the other question olan adlandırılmış sabitler yerine sayısal değerler kullanıyorsunuz. İkinci seni tahmin zorunda Bizsiz


açıkçası çıkışa Eğer bir toplu iş dosyası taklit çalışıyoruz String Concatenation

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

Hatırlatıcı için teşekkürler, bu kodu uyguladıktan sonra msgbox'ım geri kalanı çalışmıyor. Ayrıca, her iki şekilde de hala sayısal değerleri kullanamaz mısınız? Fark eder mi yoksa bir çeşit farklılık var mı? Nedenini bilmiyorum, ama sayıları kullanmak daha kolay görünüyor ve – InterLinked

+0

için bir neden olmadıkça bunu yapmayı tercih ederim. Sonuçta oluşacak her bir ifadenin çıktısını almak için 'WScript.Echo' kullanıyorsunuz. wscript.exe '' cscript.exe' yerine * bir Message Box'da 'MsgBox()' ile benzer şekilde üretilir fakat daha az seçenek bulunur. Eğer sadece bir 'MsgBox'un tüm metni içeren bir dizgeyi ilk önce bir değişkene dönüştürmesini istiyorsanız o zaman' MsgBox() 'çağrılırken bu değişkeni kullanın. – Lankymart

+0

Sadece Wscript.Echo'dan kurtulabilir miyim? – InterLinked

2

kullanarak yapabilirsiniz son açıklamada strServer değişken istiyorum. VBS'nin kendi yolları vardır. VBS yolları daha güvenilirdir. 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 

Karşılaştığınız sorun en Yardım Gönderen

dizeleri ve değişkenler & kullanılarak birleştirilmesi gerekir olduğunu. Bir VB/VBS dizesindeki tek özel anlam, bir tane için iki alıntıdır ( ""). Diğer her şey, C tabanlı dillerden farklı olarak (ve farklı bir şekilde batchfile).

msgbox "Windows has reformatted Drive C: on " & strServer & " Successfully."