无法从 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,文本会回显到 stdout 并且是非阻塞的。使用 WScript,文本会显示在模式对话框中并且是阻塞的。如果 (1) 您从命令提示符调用脚本,(2) 您从计划任务调用脚本,则通常首选前者。

相关内容