如何用批处理完成 多文件、多文件夹 拖动到批处理上输出文件路径列表并根据列表文件逐项完成操作。

如何用批处理完成如下操作:

1、将多个文件(或者几个文件夹;或者文件+文件夹)拖放在批处理上
2、在系统temp目录下生成 所有文件的绝对路径
3、然后生成的文件列表,逐项进行 操作
a、执行conver.exe 无参数 【conver.exe 路径文件中的一条】(此时所有转换文件在源文件目录,并重新命名带(New)字样)
b、删除除包含(New)以外的文件【就是删除源文件】
c、重命名转换后的文件 去除(New)前缀

只有那点分了!

@Echo Off&Setlocal Enabledelayedexpansion
Del /q list.txt
For /l %%a in (1,1,9) do (Call Set "f=%%%%~a"
(If defined f Dir /a-d /b /s !f!)>>list.txt)
For /f "tokens=*" %%i in (list.txt) do (
conver.exe "%%i" 
Del /q /a "%%i"
Ren "%%~dpni_New%%~xi" "%%~nxi"
)
Pause

默认将文件列表生成到批处理所在文件夹中(方便查看,可以修改到temp中).默认生成的新文件名格式为 原文件名_New.txt,如果不是请手动修改一下代码.或者说明后我再修改代码.

追问

除了刚才我发现的问题,能不能在最开始有个判断,如果直接拖动可进行处理,双击打开bat后,也能支持多文件,多目录拖动呢?然后仅在bat 上提示需要操作的共多少文件。

追答@Echo Off&Setlocal Enabledelayedexpansion
Del /q "%temp%\list.txt" 2>nul
For /l %%a in (1,1,9) do (Call Set "f=%%%%~a"
(If defined f Dir /a-d /b /s !f!)>>"%temp%\list.txt")
For /f "usebackq tokens=*" %%i in ("%temp%\list.txt") do (
"%~dp0conver.exe" "%%i" 
Del /q /a "%%i"
Ren "%%~dpni_New%%~xi" "%%~nxi"
)
Pause

追问

好的,现在执行下来,能使用了,非常感谢。
【还有两个请求】
【1】就是一次最多9个文件,能不能修改称为,递归式的,因为不知道 一些文件夹目录下有多少个。
【2】只针对jpg 和 doc文件进行转换,是不是在生成list.txt的时候有个判断?

追答@Echo Off&Setlocal Enabledelayedexpansion
Del /q "%temp%\list.txt" 2>nul
For /l %%a in (1,1,9) do (Call Set "f=%%%%~a"
(If defined f Dir /a-d /b /s !f!)>>"%temp%\list.txt")
For /f "tokens=*" %%i in ('Type "%temp%\list.txt"^|Findstr /r /i ".doc$ .jpg$"') do (
"%~dp0conver.exe" "%%i" 
Del /q /a "%%i"
Ren "%%~dpni_New%%~xi" "%%~nxi"
)
Pause

    当前代码最多支持9个.多出的部分会被忽略.你没仔细测试,默认处理文件夹以及子文件夹中的文件.

    生成时过滤会略微影响效率,所以改在转换前过滤.

追问

非常感谢,你太厉害了,我自己写了半天都无法达到效果。
conver在运行的时候会有echo显示,如何屏蔽,而直接显示
正在运行....

追答echo 正在运行....
"%~dp0conver.exe" "%%i" >nul

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-10-25
把指定文件夹或文件路径生成txt放在temp?
运行路径中的conver.exe?
把txt中所有文件备份一份new文件名的文件?
删除原文件?
去掉new文件的new?

总结:new后又还原,这不是多此一举?还是conver自动修改了内容生成 的new文件,麻烦讲述清楚一点追问

需要将jpg 和 doc 文件生成的路径文件放在缓存,其实放哪里都一样,为了方便也可以放在bat文件目录下

conver.exe于 bat 同目录

conver 这是个命令行软件 无任何参数,强制转换后添加名字
conver后 文件添加了一些标识,所以算是全新的文件

追答

@echo off
set /p a=拖入文件或目录
for /f "tokens=*" %%i in ('dir /a-d /b %a%') do (
echo %%~dpi>>login.txt
conver
del %%i
)
for /f "tokens=*" %%a in ('dir /a-d /b new%%~nxi') do (
ren %%a %%~nxi
)

把拖入的文件路径 放到login.txt里,调用conver
默认当作conver会把文件产生一个new文件
删除原文件

遍历刚刚的new文件,把文件名更名为原文件名

不知道是不是你说的意思

第2个回答  2013-10-25
@echo off
set a=%1 %2 %3 %4 %5 %6 %7 %8 %9
echo %a%
dir/s/b/a-d %a% ^|Findstr .jpg$ .doc$>%temp%\123.txt

type %temp%\123.txt
echo 以上是你要处理的文件请核对,如不是请ctrl+c退出
pause

For /f "tokens=*" %%I in (%temp%\123.txt) do (
conver.exe "%%I"
Del /q /a "%%I"
ren "%%~dpI_New%%~nxI" "%%~nxI"
)

pause
相似回答