无法将VBScript移动至其他目录,提示“文件未找到”问题排查
问题分析与修正方案
核心问题点
- 自身路径获取错误:原代码通过
fso.GetAbsolutePathName(strFile)获取路径依赖当前工作目录,若脚本不在当前目录运行,会得到错误路径;正确方式是用WScript.ScriptFullName直接获取脚本自身的完整路径。 - 环境变量未解析:
%username%是系统环境变量,VBScript不会自动识别,需用WshShell.ExpandEnvironmentStrings展开才能得到正确的用户目录路径。 - 路径拼接冗余:最后一行将已包含文件名的
SourceLocation与FileName重复拼接,导致源路径无效;目标路径的多余引号也会让系统无法识别正确目录。
修正后的代码
Set objShell = CreateObject("Wscript.Shell") Set fso = CreateObject("Scripting.FileSystemObject") ' 获取脚本自身的完整路径(含文件名) strSelfPath = WScript.ScriptFullName Wscript.Echo "当前脚本路径:" & strSelfPath Wscript.Sleep 1000 ' 解析环境变量,生成启动文件夹的完整路径 DestinationLocation = objShell.ExpandEnvironmentStrings("C:\Users\%username%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\") ' 移动脚本到启动文件夹,保留原文件名 fso.MoveFile strSelfPath, DestinationLocation & fso.GetFileName(strSelfPath)
关键说明
WScript.ScriptFullName:直接返回当前运行脚本的绝对路径(包含文件名),彻底避免工作目录带来的路径错误。objShell.ExpandEnvironmentStrings:把%username%解析为当前登录用户的用户名,生成正确的启动文件夹路径。fso.GetFileName(strSelfPath):从脚本完整路径中提取文件名,确保移动后的文件名称与原文件一致,逻辑更严谨。
内容的提问来源于stack exchange,提问作者Nico Knothe
相关产品推荐
相关产品推荐

