Board logo

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

作者: abcdsys    时间: 2023-11-14 13:23     标题: [已解决]大佬能不能帮忙写个vbs复制图片到U盘

本帖最后由 abcdsys 于 2023-11-16 17:26 编辑

各位大佬,能不能帮忙写个vbs,
需求是 后台复制当前打开的文件夹中图片格式的文件到U盘中,U盘的盘符不能确定。
感谢

作者: czjt1234    时间: 2023-11-15 21:12

  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
复制代码
未测试
作者: abcdsys    时间: 2023-11-16 15:40

回复 2# czjt1234


    感谢大佬,可以使用
还有一个问题,能不能静默复制,不要显示复制的进度条,还有可以指定复制到U盘的某个文件夹吗?
谢谢
作者: czjt1234    时间: 2023-11-16 16:19

本帖最后由 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
复制代码

作者: jyswjjgdwtdtj    时间: 2023-11-16 22:07

回复 4# czjt1234


    何必又用fso又用shell.application又用cmd呢
作者: czjt1234    时间: 2023-11-17 09:28

回复 5# jyswjjgdwtdtj


    隐藏复制的进度条
作者: abcdsys    时间: 2023-11-17 10:38

本帖最后由 abcdsys 于 2023-11-17 11:18 编辑

回复 4# czjt1234


    大佬,有个问题,如果电脑上有其他U盘的话就不行了,如果U盘盘符是确定的,比方说是G的话,或者是仅复制到这个vbs文件运行时所在的U盘里面,应该怎么修改代码,
感谢!
作者: czjt1234    时间: 2023-11-17 12:38

本帖最后由 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
复制代码

作者: jyswjjgdwtdtj    时间: 2023-11-17 22:28

回复 6# czjt1234


    额 copyhere可以加第二个参数的吧




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