找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 10533|回复: 2

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

[复制链接]
发表于 2023-2-1 21:12:06 | 显示全部楼层 |阅读模式
请问这个代码怎么将拖拽执行改为指定路径执行,在哪里进行修改呢?
  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. ​
  11. &#8203;If&#8203;&#160;&#8203;WScript.Arguments.Count<&#8203;1&#8203;&#160;&#8203;Then
  12. &#8203;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#8203;WScript.Echo&#8203;&#160;&#8203;"请把需要缩减的父文件夹拖到本脚本上运行(既使用参数方式提供路径)"
  13. &#8203;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#8203;WScript.Quit
  14. &#8203;ElseIf&#8203;&#160;&#8203;LCase(Right(WScript.FullName,&#8203;11&#8203;))&#8203;&#160;&#8203;=&#8203;&#160;&#8203;"wscript.exe"&#8203;&#160;&#8203;Then
  15. &#8203;&#160;&#160;&#160;&#160;&#8203;osh.run&#8203;&#160;&#8203;"cmd&#160;/c&#160;cscript.exe&#160;//nologo&#160;"""&#8203;&#160;&#8203;&&#8203;&#160;&#8203;WScript.ScriptFullName&#8203;&#160;&#8203;&&#8203;&#160;&#8203;"""&#160;"""&#8203;&#160;&#8203;&&#8203;&#160;&#8203;WScript.Arguments(&#8203;0&#8203;)&#8203;&#160;&#8203;&&#8203;&#160;&#8203;""""
  16. &#8203;&#160;&#160;&#160;&#160;&#8203;WScript.quit
  17. &#8203;End&#8203;&#160;&#8203;If

  18. &#8203;'End&#160;If


  19. &#8203;'搜寻文件夹迭代函数
  20. &#8203;Function&#8203;&#160;&#8203;FindChildren(FolderPath)
  21. &#8203;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#8203;set&#8203;&#160;&#8203;iFolder&#8203;&#160;&#8203;=&#8203;&#160;&#8203;fso.GetFolder(FolderPath)&#8203;&#160;&#160;&#160;&#160;&#160;&#8203;'获取文件夹
  22. &#8203;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#8203;set&#8203;&#160;&#8203;iSubFolders&#8203;&#160;&#8203;=&#8203;&#160;&#8203;iFolder.SubFolders&#8203;&#160;&#160;&#160;&#160;&#8203;'获取子目录集合
  23. &#8203;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#8203;set&#8203;&#160;&#8203;iFiles&#8203;&#160;&#8203;=&#8203;&#160;&#8203;iFolder.Files&#8203;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#8203;'获取文件集合
  24. &#8203;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#8203;If&#8203;&#160;&#8203;iFiles.Count=&#8203;&#160;&#8203;0&#8203;&#160;&#8203;And&#8203;&#160;&#8203;iSubFolders.count&#8203;&#160;&#8203;=&#8203;&#160;&#8203;1&#8203;&#160;&#8203;Then&#8203;&#160;&#8203;'如果只有一个文件夹
  25. &#8203;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#8203;For&#8203;&#160;&#8203;each&#8203;&#160;&#8203;Cfolder&#8203;&#160;&#8203;in&#8203;&#160;&#8203;iSubFolders&#8203;&#160;&#8203;'迭代调用本函数
  26. &#8203;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#8203;FindChildren&#8203;&#160;&#8203;=&#8203;&#160;&#8203;FindChildren(Cfolder)
  27. &#8203;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#8203;Exit&#8203;&#160;&#8203;For
  28. &#8203;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#8203;Next
  29. &#8203;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#8203;ElseIf&#8203;&#160;&#8203;iFiles.Count>&#8203;&#160;&#8203;0&#8203;&#160;&#8203;Or&#8203;&#160;&#8203;iSubFolders.count&#8203;&#160;&#8203;>&#8203;&#160;&#8203;1&#8203;&#160;&#8203;Then&#8203;&#160;&#8203;'如果有文件或者两个及以上文件夹则为最内层
  30. &#8203;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#8203;FindChildren&#8203;&#160;&#8203;=&#8203;&#160;&#8203;FolderPath
  31. &#8203;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#8203;Else&#8203;&#160;&#8203;'什么都没有的空文件夹
  32. &#8203;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#8203;FindChildren&#8203;&#160;&#8203;=&#8203;&#160;&#8203;"empty"
  33. &#8203;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#8203;End&#8203;&#160;&#8203;if
  34. &#8203;End&#8203;&#160;&#8203;Function
  35.   
  36. &#8203;'是否符合正则表达式
  37. &#8203;Function&#8203;&#160;&#8203;RegExpTest(strng,&#8203;&#160;&#8203;patrn)&#8203;&#160;
  38. &#8203;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#8203;Dim&#8203;&#160;&#8203;regEx&#8203;&#160;&#160;&#160;&#160;&#160;&#160;&#8203;'&#160;创建变量。
  39. &#8203;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#8203;Set&#8203;&#160;&#8203;regEx&#8203;&#160;&#8203;=&#8203;&#160;&#8203;New&#8203;&#160;&#8203;RegExp&#8203;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#8203;'&#160;创建正则表达式。
  40. &#8203;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#8203;regEx.Pattern&#8203;&#160;&#8203;=&#8203;&#160;&#8203;patrn&#8203;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#8203;'&#160;设置模式。
  41. &#8203;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#8203;regEx.IgnoreCase&#8203;&#160;&#8203;=&#8203;&#160;&#8203;True&#8203;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#8203;'&#160;设置是否区分大小写,True为不区分。
  42. &#8203;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#8203;regEx.Global&#8203;&#160;&#8203;=&#8203;&#160;&#8203;True&#8203;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#8203;'&#160;设置全程匹配。
  43. &#8203;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#8203;RegExpTest&#8203;&#160;&#8203;=&#8203;&#160;&#8203;regEx.Test(strng)&#8203;&#160;&#160;&#160;&#8203;'&#160;执行搜索。
  44. &#8203;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#8203;Set&#8203;&#160;&#8203;regEx&#8203;&#160;&#8203;=&#8203;&#160;&#8203;Nothing
  45. &#8203;End&#8203;&#160;&#8203;Function

  46.   
  47. &#8203;If&#8203;&#160;&#8203;WScript.Arguments.Count<&#8203;1&#8203;&#160;&#8203;Then
  48. &#8203;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#8203;rootFolder&#8203;&#160;&#8203;=&#8203;&#160;&#8203;osh.CurrentDirectory&#8203;&#160;&#8203;'当前程序所在目录
  49. &#8203;Else
  50. &#8203;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#8203;rootFolder&#8203;&#160;&#8203;=&#8203;&#160;&#8203;WScript.Arguments(&#8203;0&#8203;)&#8203;&#160;&#8203;'将第一个参数存入
  51. &#8203;End&#8203;&#160;&#8203;If
复制代码
发表于 2023-2-1 21:37:19 | 显示全部楼层
&#8203;Dim&#8203; &#8203;ws,fs,rootFolder,message,&#8203; &#8203;_
&#8203;        &#8203;cLog,LogName,&#8203; &#8203;_
&#8203;        &#8203;EmptyFolder,TempFolder
&#8203;Set&#8203; &#8203;osh&#8203; &#8203;=&#8203; &#8203;CreateObject(&#8203;"WScript.Shell"&#8203;)
&#8203;set&#8203; &#8203;fso&#8203; &#8203;=&#8203; &#8203;CreateObject(&#8203;"Scripting.FileSystemObject"&#8203;)
&#8203;cLog&#8203; &#8203;=&#8203; &#8203;True&#8203; &#8203;'是否生成日志文件
&#8203;LogName&#8203; &#8203;=&#8203; &#8203;WScript.ScriptFullName&#8203; &#8203;&&#8203; &#8203;"_"&#8203; &#8203;&&#8203; &#8203;Replace(Replace(FormatDateTime(Now(),vbGeneralDate),&#8203;"/"&#8203;,&#8203;"-"&#8203;),&#8203;":"&#8203;,&#8203;"-"&#8203;)&#8203; &#8203;&&#8203; &#8203;".log"&#8203; &#8203;'日志名称
&#8203;EmptyFolder&#8203; &#8203;=&#8203; &#8203;"(_Empty)"&#8203; &#8203;'空文件夹存放点
&#8203;TempFolder&#8203; &#8203;=&#8203; &#8203;"(_Temp)"&#8203; &#8203;'转移用临时存放点
&#8203;
s = "d:\指定路径文件夹"
&#8203;If&#8203; &#8203;WScript.Arguments.Count > 0&#8203; &#8203;Then s = &#8203;WScript.Arguments(&#8203;0&#8203;)
If&#8203; &#8203;LCase(Right(WScript.FullName,&#8203;11&#8203;))&#8203; &#8203;=&#8203; &#8203;"wscript.exe"&#8203; &#8203;Then
&#8203;    &#8203;osh.run&#8203; &#8203;"cmd /c cscript.exe //nologo """&#8203; &#8203;&&#8203; &#8203;WScript.ScriptFullName&#8203; &#8203;&&#8203; &#8203;""" """&#8203; &#8203;&&#8203; s&#8203; &#8203;&&#8203; &#8203;""""
&#8203;    &#8203;WScript.quit
&#8203;End&#8203; &#8203;If
&#8203;'End If

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


既可指定文件夹,也可拖放
 楼主| 发表于 2023-2-1 21:42:43 | 显示全部楼层
回复 2# czjt1234
感谢大佬
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-16 20:42 , Processed in 0.021420 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表