Проблема с базовым VBScript, который пишет в текстовом файле - PullRequest
0 голосов
/ 30 июня 2018

Я скопировал старый код VBS из здесь , но, похоже, он не работает. Я ничего не знаю о VBS, поэтому я потерян здесь.

Кажется, что это очень просто, он открывает текстовый файл, изменяет значения в соответствии с тем, что было написано ранее (он просто «немного переворачивает»), удаляет старый файл, а затем записывает новый. Кажется, что возникают проблемы с закрытием созданного файла, и он никогда не создает

В строке 42 выдается ошибка с кодом

800A01A8, "Требуемый объект: ''".

Const ForAppending = 8
Const ForReading = 1

Dim outPutFile

Dim objFSO, objFile, objOutFile, strLine
dim sleepLine1, sleepLine2, doNothingLine1, doNothingLine2

sleepLine1 = "powercfg -SETACVALUEINDEX 381b4222-f694-41f0-9685-ff5bb260df2e 4f971e89-eebd-4455-a8de-9e59040e7347 5ca83367-6e45-459f-a27b-476b1d01c936 1"
sleepLine2 = "powercfg -SETDCVALUEINDEX 381b4222-f694-41f0-9685-ff5bb260df2e 4f971e89-eebd-4455-a8de-9e59040e7347 5ca83367-6e45-459f-a27b-476b1d01c936 1"
doNothingLine1 = "powercfg -SETACVALUEINDEX 381b4222-f694-41f0-9685-ff5bb260df2e 4f971e89-eebd-4455-a8de-9e59040e7347 5ca83367-6e45-459f-a27b-476b1d01c936 0"
doNothingLine2 = "powercfg -SETDCVALUEINDEX 381b4222-f694-41f0-9685-ff5bb260df2e 4f971e89-  eebd-4455-a8de-9e59040e7347 5ca83367-6e45-459f-a27b-476b1d01c936 0"

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile("ToggleLidAction.bat", ForReading)

Do Until objFile.AtEndOfStream
    strLine = objFile.ReadLine
    strDoNothing = InStr(strLine, "powercfg -SETDCVALUEINDEX 381b4222-f694-41f0-9685- ff5bb260df2e 4f971e89-eebd-4455-a8de-9e59040e7347 5ca83367-6e45-459f-a27b-476b1d01c936 0")
    strSleep = InStr(strLine, "powercfg -SETDCVALUEINDEX 381b4222-f694-41f0-9685-     ff5bb260df2e 4f971e89-eebd-4455-a8de-9e59040e7347 5ca83367-6e45-459f-a27b-476b1d01c936 1")
Loop
objFile.Close

Set obj = CreateObject("Scripting.FileSystemObject")
obj.DeleteFile("ToggleLidAction.bat")

If strDoNothing Then
    outPutFile = "ToggleLidAction2.bat"
    Set objOutFile = objFSO.CreateTextFile(outPutFile, ForAppending)
    objOutFile.WriteLine "" & sleepLine1 & ""
    objOutFile.WriteLine "" & sleepLine2 & ""
    MsgBox ("The System will now Sleep when the lid is closed.")
Else
    If strSleep Then
        outPutFile = "ToggleLidAction2.bat"
        Set objOutFile = objFSO.CreateTextFile(outPutFile,ForAppending)
        objOutFile.WriteLine "" & doNothingLine1 & ""
        objOutFile.WriteLine "" & doNothingLine2 & ""
        MsgBox ("The System will now continue running when the lid is closed.")
    End If
End If
objOutFile.Close

Set objShell = WScript.CreateObject("WScript.Shell")
objShell.Run "ToggleLidAction2.bat C:\WINDOWS\system32\cmd.exe", 0

1 Ответ

0 голосов
/ 30 июня 2018

Если ни одно из условий в разделе выше этой строки не выполнено, objOutFile никогда не создается и поэтому не может быть закрыт. Вы будете вызывать Close для несуществующего объекта. Мой VBScript немного ржавый, но я считаю, что проверка на него будет выглядеть примерно так: If Not objOutFile Is Nothing Then ObjOutFile.Close

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...