У меня есть скрипт для пингования серверов, который я запускал, переходя по пути, где находится мой файл, в 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
тогда действие будет получено из реестра.
На моем компьютере установлено следующее.
- Компьютер\HKEY_CLASSES_ROOT.vbs
- (По умолчанию) REG_SZ VBSFile
- Компьютер\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) вы вызываете скрипт из запланированной задачи.