無法從cmd運行vbscript

無法從cmd運行vbscript

我有一個腳本來 ping 伺服器,我用來執行該腳本,轉到 CMD 上我的文件所在的路徑,然後鍵入以下行

FileName ip logname.log

這是我運行的腳本

hostIp      = wscript.arguments(0)
logfilename = wscript.arguments(1)
Set fso     = CreateObject("Scripting.FileSystemObject")
Set Shell   = CreateObject("Wscript.Shell")
' OpenTextFile Method requires a Const value
' (Over)Write = 2  Append = 8   
Set logfile = fso.OpenTextFile(logfilename, 8, True)
shellstring = "%comspec% /c ping -t -f -l 32 -w 1000 " & hostIP
Set oExec   = Shell.Exec(shellstring)
wscript.echo "Ping Error log With Timestamp - Ctrl + C to halt"
Do While oExec.StdOut.AtEndOfStream <> True
      pingline = Date & " " & Time & " " & oExec.StdOut.ReadLine
'      If InStr(pingline, "TTL=") = 0 Then
         logfile.WriteLine(pingline)
'      End If
Loop

但是,每當我執行它時,它就不再工作了,現在它會打開文件而不是執行它。關於如何解決這個問題有什麼想法嗎?

答案1

如果您使用語法:

Filename ip logname.log

那麼該操作將從註冊表中派生。

在我的電腦上,我有以下內容。

  1. 計算機\HKEY_CLASSES_ROOT.vbs
    • (預設)REG_SZ VBSFile
  2. 計算機\HKEY_CLASSES_ROOT\VBSFile\Shell\Open\Command
    • (預設)REG_EXPAND_SZ "%SystemRoot%\System32\WScript.exe" "%1" %*

如果您不想讓它碰巧,您必須在命令列中明確包含 WScript 或 CScript,例如

CScript Filename ip logname.log

CScript 和 WScript 之間最顯著的差異是WScript.Echo.使用 CScript,文字會回顯到標準輸出且是非阻塞的。對於 WScript,文字顯示在模式對話方塊中並且是阻塞的。如果 (1) 您從命令提示字元呼叫腳本,(2) 您從排程任務呼叫腳本,則通常首選前者。

相關內容