Board logo

标题: [文件操作] 【已解决】获取多个文件夹里的jpg文件名的批处理如何以拖放的方式执行? [打印本页]

作者: 6232333    时间: 2016-2-13 14:40     标题: 【已解决】获取多个文件夹里的jpg文件名的批处理如何以拖放的方式执行?

本帖最后由 pcl_test 于 2016-9-9 11:50 编辑

下面这个批处理,是提取当前文件夹中的JPG文件名到“当前JPG文件清单”文本文档中,是需要把批处理文件复制到当前文件夹中操作进行,最好是一次可以拖动多个文件夹也能执行!

怎么改动下,让我可以把需要处理的文件夹拖动到这个批处理图标上就能处理。(打个比方:就是批处理在桌面,我要提取JPG文件名的文件是F盘下的“照片”,我只需要把“照片”文件夹拖动到桌面的批处理图标上,就自动在F盘“照片”文件夹下生成“当前JPG文件清单”文本文档)
  1. @echo off
  2. dir *.jpg/a-d /b >./当前JPG文件清单.txt
复制代码

作者: ivor    时间: 2016-2-13 15:51

本帖最后由 ivor 于 2016-2-13 15:53 编辑
  1. @echo off
  2. dir %~f1\*.jpg /a-d /b >当前JPG文件清单.txt
  3. dir %~f1 /b/ad >当前文件夹清单.txt
  4. pause
复制代码
其实你如果仔细看上次给你解决的传参数,方法就会了
call /?里面有参数解释
作者: 再世情緣    时间: 2016-2-13 17:50

其实你如果仔细看上次给你解决的传参数,方法就会了
call /?里面有参数解释
ivor 发表于 2016-2-13 15:51



一点小细节,如果文件及路径中右空格,会出现问题的,所以,应该是
  1. @echo off
  2. dir "%~f1\*.jpg" /a-d /b >当前JPG文件清单.txt
  3. dir "%~f1" /b/ad >当前文件夹清单.txt
  4. pause
复制代码

作者: 6232333    时间: 2016-2-13 17:56

本帖最后由 6232333 于 2016-2-13 17:59 编辑

回复 2# ivor


    您好,用不了呢。
经过测试,把文件夹拖到BAT图标上,没有反应,还是要和以前一样,把批处理复制到当前文件夹上双击才可以使用!
作者: 6232333    时间: 2016-2-13 18:01

本帖最后由 6232333 于 2016-2-13 18:04 编辑

回复 3# 再世情緣


    您好,您这个也用不了呢?也是必须复制到当前文件夹中双击才能用,能再帮帮我吗?谢谢各位大神!
作者: ivor    时间: 2016-2-13 19:20

回复 5# 6232333


    那两个txt“当前JPG文件清单.txt”,“当前文件夹清单.txt”文件在,你要拖入BAT的文件夹所在位置,不是在本BAT所在的位置。我测试正常
作者: 6232333    时间: 2016-2-13 19:41

回复 6# ivor


    我的意思是:如果想把那个文件夹的JPG文件提取出来,直接把这个文件拖动到BAT批处理的图标上就能执行。谁能帮我再弄弄啊!
作者: ivor    时间: 2016-2-13 19:47

回复 7# 6232333


    可是你没有提供目标文件夹路径,JPG往哪COPY。http://www.bathome.net/thread-39350-1-1.html这个不就是你想要的吗
作者: 6232333    时间: 2016-2-13 21:09

本帖最后由 6232333 于 2016-2-13 21:38 编辑

回复 8# ivor

这个帖子是另外求助的,和本帖没有关联性!

    可能你们误会我的意思了。我不是要把这2个批处理合并成一个批处理。


我的意思是:比如说我要提取的文件名是F盘下的“照片”文件夹,这个批处理文件在桌面,我只要把F盘的“照片”文件夹拖入到桌面的批处理图标上,就自动在F盘“照片”文件夹中新建个文本文档,把文件名依次输入进去。

最好是做出来的批处理支持一次拖动多个文件夹!
作者: 再世情緣    时间: 2016-2-13 23:55

本帖最后由 再世情緣 于 2016-2-14 19:36 编辑

回复 9# 6232333


    在别人的基础上修改的,测试可用
  1. @echo off & setlocal enabledelayedexpansion
  2. set /a "count=0"
  3. call :fuc %1
  4. call :fuc %2
  5. call :fuc %3
  6. call :fuc %4
  7. call :fuc %5
  8. call :fuc %6
  9. call :fuc %7
  10. call :fuc %8
  11. call :fuc %9
  12. echo 处理了 !count! 个文件夹......&pause
  13. goto :eof
  14. :fuc folder
  15. if "#%1#" EQU "##" goto :eof
  16. set "att=%~a1" &&set "att=!att:~,1!"
  17. set "var=%~f1"
  18. if /i "#!att!#" EQU "#d#" (
  19. cd /d "!var!" >"!var!\当前文件夹清单.txt"
  20. for /f "delims=" %%A in ('dir /b /a +d "*" 2^>nul') do (
  21. set "att1=%%~aA" &&set "att1=!att1:~,1!"
  22. if /i "#!att1!#" EQU "#d#" (echo.%%~nA)>>"!var!\当前文件夹清单.txt"
  23. )
  24. set /a "count+=1"
  25. )
  26. goto :eof
复制代码
  1. @echo off & setlocal enabledelayedexpansion
  2. set /a "count=0"
  3. call :fuc %1
  4. call :fuc %2
  5. call :fuc %3
  6. call :fuc %4
  7. call :fuc %5
  8. call :fuc %6
  9. call :fuc %7
  10. call :fuc %8
  11. call :fuc %9
  12. echo 处理了 !count! 个文件夹......&pause
  13. goto :eof
  14. :fuc folder
  15. if "#%1#" EQU "##" goto :eof
  16. set "att=%~a1" &&set "att=!att:~,1!"
  17. if /i "#!att!#" EQU "#d#" (
  18. dir /b /a -d "%~f1\*.jpg" 2>nul >"%~f1\当前JPG文件清单.txt"
  19. set /a "count+=1"
  20. )
  21. goto :eof
复制代码

作者: 6232333    时间: 2016-2-14 10:27

回复 10# 再世情緣


    您好,第一个提取文件夹的有点问题,提取出来的是当前文件夹里所有文件的名称,我只想提取当前文件夹下包含的文件夹名称。
第二个完全不能用。
我的是xp系统,和这个有关系吗?
作者: 6232333    时间: 2016-2-14 10:47

回复 10# 再世情緣


第二个我自己参照您的第一个修改了下,可以用了。把“@echo off”改成“@echo off & setlocal enabledelayedexpansion”就可以用了!
第一个谁我也改了下,但是还是不行,大家帮帮忙!
作者: 再世情緣    时间: 2016-2-14 19:38

回复 12# 6232333


    已经在原楼层修改。。。。
作者: WHY    时间: 2016-2-14 23:34

批处理拖拽==蛋蛋疼
作者: 6232333    时间: 2016-2-15 09:25

回复 14# WHY


    为何这样说,菜鸟一枚,求解释!我感觉总比复制在当前文件夹操作要方便快捷很多啊!
作者: 6232333    时间: 2016-2-15 09:38

回复 10# 再世情緣

   感谢感谢!
   发现提取JPG文件名称的还有点小问题,就是当文件夹上含有空格的时候,拖动在批处理图标上处理不了!有时间在帮我改下吗?
作者: wskwfkbdn    时间: 2016-2-15 11:15

如果文件名或路径没有什么特殊字符的话 基本都是可以处理的

http://www.bathome.net/viewthread.php?tid=39243&highlight=
作者: 6232333    时间: 2016-2-15 14:20

回复 17# wskwfkbdn


    本人小白一个,看不懂,能帮我亲自改下吗?
作者: WHY    时间: 2016-2-15 15:35

vbs
  1. On Error Resume Next
  2. Dim n, fso, i, s, strFolder, objFile
  3. n = WSH.Arguments.Length
  4. if n = 0 Then MsgBox "请拖拽文件夹" : WSH.Quit()
  5. Set fso = CreateObject("Scripting.FileSystemObject")
  6. For i = 0 To n - 1
  7.     strFolder = WSH.Arguments(i)
  8.     If fso.FolderExists(strFolder) Then
  9.         s = ""
  10.         For Each objFile In fso.GetFolder(strFolder).Files
  11.             If LCase(Right(objFile.Name, 4)) = ".jpg" Then
  12.                 s = s & objFile.Name & vbCrLf
  13.             End If
  14.         Next
  15.         fso.CreateTextFile(strFolder & "\当前JPG文件清单.txt", True, -1).Write(s)
  16.     End If
  17. Next
复制代码
  1. On Error Resume Next
  2. Dim n, fso, i, s, strFolder, objFolder
  3. n = WSH.Arguments.Length
  4. if n = 0 Then MsgBox "请拖拽文件夹" : WSH.Quit()
  5. Set fso = CreateObject("Scripting.FileSystemObject")
  6. For i = 0 To n - 1
  7.     strFolder = WSH.Arguments(i)
  8.     If fso.FolderExists(strFolder) Then
  9.         s = ""
  10.         For Each objFolder In fso.GetFolder(strFolder).SubFolders
  11.             s = s & objFolder.Name & vbCrLf
  12.         Next
  13.         fso.CreateTextFile(strFolder & "\当前文件夹清单.txt", True, -1).Write(s)
  14.     End If
  15. Next
复制代码

作者: wskwfkbdn    时间: 2016-2-15 19:12

回复 18# 6232333


    保存那个代码为bat即可,把文件拖上去就能够获取路径




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