vbscript未在较大脚本的上下文中创建快捷方式

vbscript未在较大脚本的上下文中创建快捷方式,vbscript,shortcut,Vbscript,Shortcut,我对脚本编程还不熟悉,正在参加一个课程,我的任务是创建一个脚本,在用户桌面上放置一个关闭计算机的快捷方式。双击快捷方式图标时,会询问用户是否确实要关闭,并提供继续或取消的选项 这就是我的问题。脚本将创建快捷方式需要链接到的文件,但实际上不会在桌面上放置快捷方式。但是,如果我只运行“创建快捷方式”脚本本身,则快捷方式会正确创建,并且所有内容都会运行。我不知道我做错了什么,在我的课本上也找不到任何帮助我的东西。这件事我已经做了好几天了。我已经附上了剧本。谢谢你的帮助 Option Explicit

我对脚本编程还不熟悉,正在参加一个课程,我的任务是创建一个脚本,在用户桌面上放置一个关闭计算机的快捷方式。双击快捷方式图标时,会询问用户是否确实要关闭,并提供继续或取消的选项

这就是我的问题。脚本将创建快捷方式需要链接到的文件,但实际上不会在桌面上放置快捷方式。但是,如果我只运行“创建快捷方式”脚本本身,则快捷方式会正确创建,并且所有内容都会运行。我不知道我做错了什么,在我的课本上也找不到任何帮助我的东西。这件事我已经做了好几天了。我已经附上了剧本。谢谢你的帮助

Option Explicit

On Error Resume Next

Dim fsoObject, open_File, target_File, wshObject, myShortcut

set fsoObject = WScript.CreateObject("Scripting.FileSystemObject")

target_File = "C:\Scripts\ShutdownShortcut.vbs"

Open_Shortcut_File()

open_File.WriteLine "Option Explicit"
open_File.WriteLine "On Error Resume Next"
open_File.WriteLine "Dim shellApp, result"
open_File.WriteLine "Set shellApp = CreateObject(""Shell.Application"")"
open_File.WriteLine "result = MsgBox (""Do you wish to shut down your computer?"", vbYesNo)"
open_File.WriteLine "Select Case result"
open_File.WriteLine "   Case vbYes"
open_File.WriteLine "       MsgBox(""The system will now shut down ..."")"
open_File.WriteLine "       Dim objShell"
open_File.WriteLine "       Set objShell = WScript.CreateObject(""WScript.Shell"")"
open_File.WriteLine "       objShell.Run ""C:WINDOWS\system32\shutdown.exe -r -t 10"""
open_File.WriteLine "   Case vbNo"
open_File.WriteLine "       MsgBox(""Shutdown cancelled."")"
open_File.WriteLine "End Select"

Close_Shortcut_File()

Function Open_Shortcut_File()
    Set open_File = fsoObject.OpenTextFile(target_File, 2, "True")
End Function

Function Close_Shortcut_File()
open_File.Close()
End Function

Set wshObject = WScript.CreateObject("WScript.Shell")
desktopFolder = wshObject.SpecialFolders("Desktop")
Set myShortcut = wshObject.CreateShortcut(desktopFolder & "\\Shutdown.lnk")
myShortcut.TargetPath = target_File
myShortcut.Save

如果将出错时的
下一步恢复
更改为出错时的
转到0
,则会得到一个未定义的错误
desktopFolder
变量。这可能是罪魁祸首,@JosefZ说的话。更一般的注意事项是:不要在脚本中使用全局
On Error Resume Next
。曾经与人们普遍认为的相反,它不会神奇地让错误消失。它只是指示解释器不要告诉您发生了什么错误,并继续执行,这可能会导致副作用,例如,由于变量未初始化或保留旧值。如果出于某种原因必须在错误恢复下一步使用
:尽可能本地化,在每个可能失败的语句后添加错误处理程序,并在之后尽快禁用错误处理(
On Error Goto 0
)。此外,作为另一条有益的一般规则,始终保持
选项的明确性
我在这里回答了几乎完全相同的问题: