标题: [文件操作] 【已解决】获取多个文件夹里的jpg文件名的批处理如何以拖放的方式执行? [打印本页]
作者: 6232333 时间: 2016-2-13 14:40 标题: 【已解决】获取多个文件夹里的jpg文件名的批处理如何以拖放的方式执行?
本帖最后由 pcl_test 于 2016-9-9 11:50 编辑
下面这个批处理,是提取当前文件夹中的JPG文件名到“当前JPG文件清单”文本文档中,是需要把批处理文件复制到当前文件夹中操作进行,最好是一次可以拖动多个文件夹也能执行!
怎么改动下,让我可以把需要处理的文件夹拖动到这个批处理图标上就能处理。(打个比方:就是批处理在桌面,我要提取JPG文件名的文件是F盘下的“照片”,我只需要把“照片”文件夹拖动到桌面的批处理图标上,就自动在F盘“照片”文件夹下生成“当前JPG文件清单”文本文档)- @echo off
- dir *.jpg/a-d /b >./当前JPG文件清单.txt
复制代码
作者: ivor 时间: 2016-2-13 15:51
本帖最后由 ivor 于 2016-2-13 15:53 编辑
- @echo off
- dir %~f1\*.jpg /a-d /b >当前JPG文件清单.txt
- dir %~f1 /b/ad >当前文件夹清单.txt
- pause
复制代码
其实你如果仔细看上次给你解决的传参数,方法就会了
call /?里面有参数解释
作者: 再世情緣 时间: 2016-2-13 17:50
其实你如果仔细看上次给你解决的传参数,方法就会了
call /?里面有参数解释
ivor 发表于 2016-2-13 15:51
一点小细节,如果文件及路径中右空格,会出现问题的,所以,应该是- @echo off
- dir "%~f1\*.jpg" /a-d /b >当前JPG文件清单.txt
- dir "%~f1" /b/ad >当前文件夹清单.txt
- 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
在别人的基础上修改的,测试可用- @echo off & setlocal enabledelayedexpansion
- set /a "count=0"
- call :fuc %1
- call :fuc %2
- call :fuc %3
- call :fuc %4
- call :fuc %5
- call :fuc %6
- call :fuc %7
- call :fuc %8
- call :fuc %9
- echo 处理了 !count! 个文件夹......&pause
- goto :eof
- :fuc folder
- if "#%1#" EQU "##" goto :eof
- set "att=%~a1" &&set "att=!att:~,1!"
- set "var=%~f1"
- if /i "#!att!#" EQU "#d#" (
- cd /d "!var!" >"!var!\当前文件夹清单.txt"
- for /f "delims=" %%A in ('dir /b /a +d "*" 2^>nul') do (
- set "att1=%%~aA" &&set "att1=!att1:~,1!"
- if /i "#!att1!#" EQU "#d#" (echo.%%~nA)>>"!var!\当前文件夹清单.txt"
- )
- set /a "count+=1"
- )
- goto :eof
复制代码
- @echo off & setlocal enabledelayedexpansion
- set /a "count=0"
- call :fuc %1
- call :fuc %2
- call :fuc %3
- call :fuc %4
- call :fuc %5
- call :fuc %6
- call :fuc %7
- call :fuc %8
- call :fuc %9
- echo 处理了 !count! 个文件夹......&pause
- goto :eof
- :fuc folder
- if "#%1#" EQU "##" goto :eof
- set "att=%~a1" &&set "att=!att:~,1!"
- if /i "#!att!#" EQU "#d#" (
- dir /b /a -d "%~f1\*.jpg" 2>nul >"%~f1\当前JPG文件清单.txt"
- set /a "count+=1"
- )
- 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- On Error Resume Next
- Dim n, fso, i, s, strFolder, objFile
-
- n = WSH.Arguments.Length
- if n = 0 Then MsgBox "请拖拽文件夹" : WSH.Quit()
- Set fso = CreateObject("Scripting.FileSystemObject")
-
- For i = 0 To n - 1
- strFolder = WSH.Arguments(i)
- If fso.FolderExists(strFolder) Then
- s = ""
- For Each objFile In fso.GetFolder(strFolder).Files
- If LCase(Right(objFile.Name, 4)) = ".jpg" Then
- s = s & objFile.Name & vbCrLf
- End If
- Next
- fso.CreateTextFile(strFolder & "\当前JPG文件清单.txt", True, -1).Write(s)
- End If
- Next
复制代码
- On Error Resume Next
- Dim n, fso, i, s, strFolder, objFolder
-
- n = WSH.Arguments.Length
- if n = 0 Then MsgBox "请拖拽文件夹" : WSH.Quit()
- Set fso = CreateObject("Scripting.FileSystemObject")
-
- For i = 0 To n - 1
- strFolder = WSH.Arguments(i)
- If fso.FolderExists(strFolder) Then
- s = ""
- For Each objFolder In fso.GetFolder(strFolder).SubFolders
- s = s & objFolder.Name & vbCrLf
- Next
- fso.CreateTextFile(strFolder & "\当前文件夹清单.txt", True, -1).Write(s)
- End If
- Next
复制代码
作者: wskwfkbdn 时间: 2016-2-15 19:12
回复 18# 6232333
保存那个代码为bat即可,把文件拖上去就能够获取路径
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |