Board logo

标题: [问题求助] VBS如何将拖拽执行的文件改为指定路径执行? [打印本页]

作者: makimaki00    时间: 2023-2-1 21:12     标题: VBS如何将拖拽执行的文件改为指定路径执行?

请问这个代码怎么将拖拽执行改为指定路径执行,在哪里进行修改呢?
  1. ​Dim​ ​ws,fs,rootFolder,message,​ ​_
  2. ​        ​cLog,LogName,​ ​_
  3. ​        ​EmptyFolder,TempFolder
  4. ​Set​ ​osh​ ​=​ ​CreateObject(​"WScript.Shell"​)
  5. ​set​ ​fso​ ​=​ ​CreateObject(​"Scripting.FileSystemObject"​)
  6. ​cLog​ ​=​ ​True​ ​'是否生成日志文件
  7. ​LogName​ ​=​ ​WScript.ScriptFullName​ ​&​ ​"_"​ ​&​ ​Replace(Replace(FormatDateTime(Now(),vbGeneralDate),​"/"​,​"-"​),​":"​,​"-"​)​ ​&​ ​".log"​ ​'日志名称
  8. ​EmptyFolder​ ​=​ ​"(_Empty)"​ ​'空文件夹存放点
  9. ​TempFolder​ ​=​ ​"(_Temp)"​ ​'转移用临时存放点
  10. ​If​ ​WScript.Arguments.Count<​1​ ​Then
  11. ​        ​WScript.Echo​ ​"请把需要缩减的父文件夹拖到本脚本上运行(既使用参数方式提供路径)"
  12. ​        ​WScript.Quit
  13. ​ElseIf​ ​LCase(Right(WScript.FullName,​11​))​ ​=​ ​"wscript.exe"​ ​Then
  14. ​    ​osh.run​ ​"cmd /c cscript.exe //nologo """​ ​&​ ​WScript.ScriptFullName​ ​&​ ​""" """​ ​&​ ​WScript.Arguments(​0​)​ ​&​ ​""""
  15. ​    ​WScript.quit
  16. ​End​ ​If
  17. ​'End If
  18. ​'搜寻文件夹迭代函数
  19. ​Function​ ​FindChildren(FolderPath)
  20. ​        ​set​ ​iFolder​ ​=​ ​fso.GetFolder(FolderPath)​     ​'获取文件夹
  21. ​        ​set​ ​iSubFolders​ ​=​ ​iFolder.SubFolders​    ​'获取子目录集合
  22. ​        ​set​ ​iFiles​ ​=​ ​iFolder.Files​              ​'获取文件集合
  23. ​        ​If​ ​iFiles.Count=​ ​0​ ​And​ ​iSubFolders.count​ ​=​ ​1​ ​Then​ ​'如果只有一个文件夹
  24. ​                ​For​ ​each​ ​Cfolder​ ​in​ ​iSubFolders​ ​'迭代调用本函数
  25. ​                        ​FindChildren​ ​=​ ​FindChildren(Cfolder)
  26. ​                        ​Exit​ ​For
  27. ​                ​Next
  28. ​        ​ElseIf​ ​iFiles.Count>​ ​0​ ​Or​ ​iSubFolders.count​ ​>​ ​1​ ​Then​ ​'如果有文件或者两个及以上文件夹则为最内层
  29. ​                ​FindChildren​ ​=​ ​FolderPath
  30. ​        ​Else​ ​'什么都没有的空文件夹
  31. ​                ​FindChildren​ ​=​ ​"empty"
  32. ​        ​End​ ​if
  33. ​End​ ​Function
  34.   
  35. ​'是否符合正则表达式
  36. ​Function​ ​RegExpTest(strng,​ ​patrn)​ 
  37. ​        ​Dim​ ​regEx​      ​' 创建变量。
  38. ​        ​Set​ ​regEx​ ​=​ ​New​ ​RegExp​         ​' 创建正则表达式。
  39. ​        ​regEx.Pattern​ ​=​ ​patrn​         ​' 设置模式。
  40. ​        ​regEx.IgnoreCase​ ​=​ ​True​         ​' 设置是否区分大小写,True为不区分。
  41. ​        ​regEx.Global​ ​=​ ​True​         ​' 设置全程匹配。
  42. ​        ​RegExpTest​ ​=​ ​regEx.Test(strng)​   ​' 执行搜索。
  43. ​        ​Set​ ​regEx​ ​=​ ​Nothing
  44. ​End​ ​Function
  45.   
  46. ​If​ ​WScript.Arguments.Count<​1​ ​Then
  47. ​        ​rootFolder​ ​=​ ​osh.CurrentDirectory​ ​'当前程序所在目录
  48. ​Else
  49. ​        ​rootFolder​ ​=​ ​WScript.Arguments(​0​)​ ​'将第一个参数存入
  50. ​End​ ​If
复制代码

作者: czjt1234    时间: 2023-2-1 21:37

​Dim​ ​ws,fs,rootFolder,message,​ ​_
​        ​cLog,LogName,​ ​_
​        ​EmptyFolder,TempFolder
​Set​ ​osh​ ​=​ ​CreateObject(​"WScript.Shell"​)
​set​ ​fso​ ​=​ ​CreateObject(​"Scripting.FileSystemObject"​)
​cLog​ ​=​ ​True​ ​'是否生成日志文件
​LogName​ ​=​ ​WScript.ScriptFullName​ ​&​ ​"_"​ ​&​ ​Replace(Replace(FormatDateTime(Now(),vbGeneralDate),​"/"​,​"-"​),​":"​,​"-"​)​ ​&​ ​".log"​ ​'日志名称
​EmptyFolder​ ​=​ ​"(_Empty)"​ ​'空文件夹存放点
​TempFolder​ ​=​ ​"(_Temp)"​ ​'转移用临时存放点

s = "d:\指定路径文件夹"
​If​ ​WScript.Arguments.Count > 0​ ​Then s = ​WScript.Arguments(​0​)
If​ ​LCase(Right(WScript.FullName,​11​))​ ​=​ ​"wscript.exe"​ ​Then
​    ​osh.run​ ​"cmd /c cscript.exe //nologo """​ ​&​ ​WScript.ScriptFullName​ ​&​ ​""" """​ ​&​ s​ ​&​ ​""""
​    ​WScript.quit
​End​ ​If
​'End If

​'搜寻文件夹迭代函数
​Function​ ​FindChildren(FolderPath)
​        ​set​ ​iFolder​ ​=​ ​fso.GetFolder(FolderPath)​     ​'获取文件夹
​        ​set​ ​iSubFolders​ ​=​ ​iFolder.SubFolders​    ​'获取子目录集合
​        ​set​ ​iFiles​ ​=​ ​iFolder.Files​              ​'获取文件集合
​        ​If​ ​iFiles.Count=​ ​0​ ​And​ ​iSubFolders.count​ ​=​ ​1​ ​Then​ ​'如果只有一个文件夹
​                ​For​ ​each​ ​Cfolder​ ​in​ ​iSubFolders​ ​'迭代调用本函数
​                        ​FindChildren​ ​=​ ​FindChildren(Cfolder)
​                        ​Exit​ ​For
​                ​Next
​        ​ElseIf​ ​iFiles.Count>​ ​0​ ​Or​ ​iSubFolders.count​ ​>​ ​1​ ​Then​ ​'如果有文件或者两个及以上文件夹则为最内层
​                ​FindChildren​ ​=​ ​FolderPath
​        ​Else​ ​'什么都没有的空文件夹
​                ​FindChildren​ ​=​ ​"empty"
​        ​End​ ​if
​End​ ​Function
  
​'是否符合正则表达式
​Function​ ​RegExpTest(strng,​ ​patrn)​  
​        ​Dim​ ​regEx​      ​' 创建变量。
​        ​Set​ ​regEx​ ​=​ ​New​ ​RegExp​         ​' 创建正则表达式。
​        ​regEx.Pattern​ ​=​ ​patrn​         ​' 设置模式。
​        ​regEx.IgnoreCase​ ​=​ ​True​         ​' 设置是否区分大小写,True为不区分。
​        ​regEx.Global​ ​=​ ​True​         ​' 设置全程匹配。
​        ​RegExpTest​ ​=​ ​regEx.Test(strng)​   ​' 执行搜索。
​        ​Set​ ​regEx​ ​=​ ​Nothing
​End​ ​Function
  
​If​ ​WScript.Arguments.Count<​1​ ​Then
​        ​rootFolder​ ​=​ ​osh.CurrentDirectory​ ​'当前程序所在目录
​Else
​        ​rootFolder​ ​=​ ​WScript.Arguments(​0​)​ ​'将第一个参数存入
​End​ ​If


既可指定文件夹,也可拖放
作者: makimaki00    时间: 2023-2-1 21:42

回复 2# czjt1234
感谢大佬




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