Board logo

标题: [问题求助] 怎么获取vbs脚本文件所在的路径 [打印本页]

作者: grf9527    时间: 2012-6-25 15:21     标题: 怎么获取vbs脚本文件所在的路径

本帖最后由 CrLf 于 2012-6-25 17:17 编辑
  1. Sub bat
  2. echo off & cls
  3. echo create_shortcut
  4. start wscript -e:vbs "%~f0"
  5. Exit Sub
  6. End Sub
  7. Set WshShell = WScript.CreateObject("WScript.Shell")
  8. strDesktop = WshShell.SpecialFolders("Desktop") :'特殊文件夹“桌面”
  9. Rem 在桌面创建一个电影快捷方式
  10. set oShellLink = WshShell.CreateShortcut(strDesktop & "\lingdong.lnk")
  11. oShellLink.TargetPath = "D:\batrun\gf.exe" : '目标
  12. oShellLink.WindowStyle = 1 :'参数1默认窗口激活,参数3最大化激活,参数7最小化
  13. oShellLink.Hotkey = "Ctrl+Alt+e" : '快捷键
  14. oShellLink.IconLocation = "D:\batrun\gf.exe, 0" : '图标
  15. oShellLink.Description = "快捷方式" : '备注
  16. oShellLink.WorkingDirectory = "D:\batrun\" : '起始位置
  17. oShellLink.Save : '创建保存快捷方式
复制代码
请注意上面的绝对路径,在正常情况下,这个路径是变化的,后面的gf.exe是不变化的。
作者: lky216    时间: 2012-6-25 16:08

  1. @echo %~dp0
  2. ::显示文件的路径
  3. @echo %~nx0
  4. ::显示文件名
  5. @echo %~f0
  6. ::显示本身路径及文件名
  7. pause
复制代码

作者: CrLf    时间: 2012-6-25 16:46

本帖最后由 CrLf 于 2012-6-25 16:48 编辑

vbs 里的:
  1. Option Explicit
  2. Dim objFSO,strFile
  3. Set objFSO = CreateObject("Scripting.FileSystemObject")
  4. Set strFile = objFSO.GetFile(WScript.ScriptFullName)
  5. MsgBox strFile.ParentFolder
  6. Set objFSO = Nothing
  7. Set strFile = Nothing
  8. ' 正儿八经的方案,参考 http://blog.csdn.net/buyicn/article/details/5641106
复制代码
  1. Option Explicit
  2. Dim f,strPath
  3. f = WScript.ScriptFullName
  4. MsgBox Left(f,Len(f) - Len(WScript.ScriptName))
  5. ' 比较简洁的方案
复制代码

作者: powerbat    时间: 2012-6-25 16:47

  1. f0 = WScript.ScriptFullName
  2. dp0 =  Mid(f0, 1, InStrRev(f0, "\"))
  3. Target = dp0 & "gf.exe"
复制代码
有些人不懂什么叫vbs
作者: powerbat    时间: 2012-6-25 16:50

这么巧,和版主同时发帖。
作者: powerbat    时间: 2012-6-25 17:03

回复 3# CrLf


用fso的话,再补充一个
  1. f0 = WScript.ScriptFullName
  2. Set fso = CreateObject("Scripting.FileSystemObject")
  3. dp0 = fso.GetAbsolutePathName(f0 & "\..")
  4. Target = dp0 & "\gf.exe"
复制代码

作者: grf9527    时间: 2012-6-25 17:53

大校的两个办法都很好.
而且我发现,如果不弹出窗口,把vbs改成bat也能运行.
我是搞c++的,没有办法了,才搞这么个东西,在win7下建立应用程序的快捷方式。呵呵。
跟大家学习了。
斑竹和大校都是搞什么语言的,感觉你们经验丰富的样子。
作者: grf9527    时间: 2012-6-25 18:12

版主的方式没有调通,那段语句确实可以实现显示的功能,可是无法集成到我的vbs的代码中,没有提示成,如果斑竹愿意,可否帮忙调通
  1. Option Explicit
  2. Sub bat
  3. echo off & cls
  4. echo create_shortcut
  5. start wscript -e:vbs "%~f0"
  6. Exit Sub
  7. End Sub
  8. 'Dim objFSO,strFile,dp1
  9. 'set
  10. objFSO = CreateObject("Scripting.FileSystemObject")
  11. 'set
  12. strFile = objFSO.GetFile(WScript.ScriptFullName)
  13. 'set
  14. dp1= strFile.ParentFolder
  15. Set WshShell = WScript.CreateObject("WScript.Shell")
  16. strDesktop = WshShell.SpecialFolders("Desktop") :'特殊文件夹“桌面”
  17. Rem 在桌面创建一个快捷方式
  18. set oShellLink = WshShell.CreateShortcut(strDesktop & "\lingdong.lnk")
  19. Target = dp1 & "lingdong.exe"
  20. oShellLink.TargetPath =Target
  21. oShellLink.WindowStyle = 1
  22. oShellLink.Hotkey = "Ctrl+Alt+e"
  23. oShellLink.IconLocation = Target & ", 0"
  24. oShellLink.Description = "lingdong.exe的快捷方式"
  25. oShellLink.WorkingDirectory = dp1
  26. oShellLink.Save
复制代码

作者: CrLf    时间: 2012-6-25 18:28

回复 8# grf9527

估计是因为你的原脚本中其他变量没有 Dim...改用 powerbat 的方案或用以下两句试试,路径保存于 strPath 变量:
  1. f = WScript.ScriptFullName
  2. strPath = Left(f,Len(f) - Len(WScript.ScriptName))
复制代码

作者: Demon    时间: 2012-6-25 23:17

搞C++的改玩VBS了哦
  1. /*
  2. *  Author: Demon
  3. *  Date: 2012/6/25
  4. *  Website: http://demon.tw
  5. *  Description: create shorcut using C++, no error handling for simplicity
  6. */
  7. #include <Windows.h>
  8. #include <shlobj.h>
  9. #include <Shlwapi.h>
  10. #pragma comment(lib, "Shlwapi.lib")
  11. int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd )
  12. {
  13.     IShellLink *pShellLink;
  14.     IPersistFile *pPersistFile;
  15.     WCHAR TargetPath[MAX_PATH], WorkingDirectory[MAX_PATH], Desktop[MAX_PATH];
  16.     LPITEMIDLIST p;
  17.     CoInitialize(NULL);
  18.     CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLink, (void **)&pShellLink);
  19.    
  20.     GetModuleFileName(NULL, TargetPath, MAX_PATH);
  21.     PathRemoveFileSpec(TargetPath);
  22.     lstrcpyn(WorkingDirectory, TargetPath, MAX_PATH);
  23.     PathAppend(TargetPath, L"gf.exe");
  24.     pShellLink->SetPath(TargetPath);
  25.     pShellLink->SetShowCmd(SW_SHOWNORMAL);
  26.     pShellLink->SetHotkey(MAKEWORD(0x45, HOTKEYF_CONTROL | HOTKEYF_ALT));
  27.     pShellLink->SetIconLocation(TargetPath, 0);
  28.     pShellLink->SetDescription(L"快捷方式");
  29.     pShellLink->SetWorkingDirectory(WorkingDirectory);
  30.     pShellLink->QueryInterface(IID_IPersistFile, (void **)&pPersistFile);
  31.     SHGetSpecialFolderLocation(NULL, CSIDL_DESKTOP, &p);
  32.     SHGetPathFromIDList(p, Desktop);
  33.     PathAppend(Desktop, L"lingdong.lnk");
  34.     pPersistFile->Save(Desktop, TRUE);
  35.     pShellLink->Release();
  36.     pPersistFile->Release();
  37.     CoUninitialize();
  38.     return 0;
  39. }
复制代码





欢迎光临 批处理之家 (http://bathome.net./) Powered by Discuz! 7.2