2013-02-13 48 views
-1

我必須將.cfg文件複製到我的工作站服務器上程序文件目錄下的特定位置。基於OS和體系結構複製文件的VBScript

不幸的是,這不僅取決於操作系統(2003/2008/2012),而且還必須確定操作系統是32位還是64位,並在適用的情況下將其複製到「Program Files(x86)」目錄路徑。

我的計劃是在一臺服務器上擁有三個不同版本的文件,並讓腳本將相關的文件複製到正確的位置(覆蓋現有文件),但我已經幾乎沒有暴露給vbscripting所以我正在掙扎大時間!

+0

不是一個真正的問題 – w35l3y 2013-02-13 13:08:38

+1

你有什麼試過?這是從一臺機器還是每臺機器運行? - [一個VBScript查找Windows版本名稱和服務包](http://stackoverflow.com/questions/4317794/a-vbscript-to-find-windows-version-name-and-the-service-pack)在「Win32_OperatingSystem」頁面的回答鏈接並查看「OSArchitecture」/「Version」屬性,底部有一個示例。 (你可以使用'InstancesOf(「Win32_OperatingSystem where primary = true」)'並避免for循環) – 2013-02-13 13:10:07

回答

2

WMI可能是最好的方法。假設該腳本將每一個目標主機,你可以做這樣的事情上運行:

srcFolder = "..." 

Set sh = CreateObject("WScript.Shell") 
Set fso = CreateObject("Scripting.FileSystemObject") 
Set wmi = GetObject("winmgmts://./root/cimv2") 

For Each os In wmi.ExecQuery("SELECT * FROM Win32_OperatingSystem") 
    ver = Left(os.Version, 3) 
Next 

Select Case ver 
    Case "5.2" : src = fso.BuildPath(srcFolder, "w3003_foo.cfg") 
    Case "6.0" : src = fso.BuildPath(srcFolder, "w2008_foo.cfg") 
    Case "6.1" : src = fso.BuildPath(srcFolder, "w2008r2_foo.cfg") 
    Case "6.2" : src = fso.BuildPath(srcFolder, "w2012_foo.cfg") 
    Case Else : WScript.Echo "Unsupported OS version: " & ver 
       WScript.Quit 
End Select 

If sh.ExpandEnvironmentStrings("%PROCESSOR_ARCHITECTURE%") = "AMD64" Then 
    dst = sh.ExpandEnvironmentStrings("%ProgramFiles(x86)%\some\foo.cfg") 
Else 
    dst = sh.ExpandEnvironmentStrings("%ProgramFiles%\some\foo.cfg") 
End If 

fso.CopyFile src, dst 
+0

感謝你的支持,看起來正是我所需要的。我已經擺在那裏我所有的文件名/目錄,但我得到了一個錯誤: 行:7 字符:10 錯誤:預期標識符 代碼:800A03F2 這是指「在」命令。 – user2068365 2013-02-13 16:16:08

+0

看起來應該是'For Each os In' – 2013-02-13 17:10:15

+0

@AlexK。確實應該。感謝您的高舉。固定。 – 2013-02-13 18:15:26

1

OS版本,你可以使用WMI獲取(或註冊表)。

For Each os In GetObject("winmgmts:").InstancesOf("Win32_OperatingSystem") 
    ver = os.Version 
Next 

但對於OS架構,我會建議在未來的一個 - WMI Win32_ProcessorShell.Environment(很多更fatser)。

ver = GetObject("winmgmts:root\cimv2:Win32_Processor='cpu0'").AddressWidth 
If ver = 64 Then ... 

ver = CreateObject("WScript.Shell").Environment("SYSTEM")("PROCESSOR_ARCHITECTURE") 
If ver = "AMD64" Then ... 
+0

好的我仍然有問題。如果我使用解決方案的第一部分,則在2K3框中出現操作系統無法識別的錯誤,並且我不瞭解如何在腳本的上下文中使用第二部分。 Ansgar寫的很棒,因爲它檢測操作系統,但是它總是試圖複製到程序文件中而不管架構如何都會崩潰。我需要的是他的腳本的第一部分檢測操作系統,第二部分試圖複製到程序文件和Prg文件(x86),並忽略如果一個目錄路徑不存在。 – user2068365 2013-02-15 16:05:44

+0

@ user2068365 - 「我不明白我將如何在腳本的上下文中使用第二部分」 - 請參閱Ansgar更新的答案。 – 2013-02-15 16:24:36

相關問題