标题: [文件操作] [已解决]批处理怎样批量复制a.txt中文件到文件夹? [打印本页]
作者: daohe 时间: 2010-4-4 17:13 标题: [已解决]批处理怎样批量复制a.txt中文件到文件夹?
例如有大量图片在D:\images文件夹(包括子文件夹)下,按如下要求整理图片
a.txt内容
aaa bbb a.jpg b.jpg c.jpg
aaa d.jpg
ccc e.jpg f.jpg
说明:
a.txt前面的指的是文件夹(是根据a.txt的内容新建的 aaa bbb的意思是bbb是aaa的一个子文件夹),后面指的是D:\images下图片
要求即是
将D:\images下的指定图片复制到新建的文件夹里
如果a.txt中图片和文件夹不好区分的话,可以在图片和文件夹加其他字符区分,如
aaa bbb | a.jpg b.jpg c.jpg
aaa | d.jpg
上面a.txt的处理结果是
将D:\images下的a.jpg b.jpg c.jpg复制到aaa下的bbb文件夹里
将D:\images下的d.jpg复制到aaa文件夹里
将D:\images下的e.jpg f.jpg复制到ccc文件夹里
[ 本帖最后由 daohe 于 2010-4-5 22:36 编辑 ]
作者: hanyeguxing 时间: 2010-4-5 00:04
- @echo off
- for /F "tokens=1* delims=|" %%a in (D:\a.txt) do for /F "tokens=1*" %%c in ("%%a") do call:hanye %%c\%%d %%b
- goto :eof
- :hanye
- if not exist "D:\images\%1" md "D:\images\%1"
- if not "%2"=="" copy "D:\images\%2" "D:\images\%1">nul&shift/2&goto hanye
复制代码
要求:
1,a.txt 中文件目录与文件名使用 | 分隔
2,目录名及文件名中不能有空格
3,a.txt 示例如下:
aaa bbb | a.jpg b.jpg c.jpg
aaa | d.jpg
作者: daohe 时间: 2010-4-5 00:40
按2楼要求修改后,测试没任何变化,测试不成功!
作者: sgaizxt001 时间: 2010-4-5 09:05
2楼的代码错无没有将“|”转义,如果不转义的话,会被CMD理解为管道符
作者: sgaizxt001 时间: 2010-4-5 09:16
不过他的代码我没测试,不知道怎么样。
我觉得用 if not /i "!str~-3!" == "jpg" 来判断是否md还是copy的话应该可以不用添加|。
作者: hanyeguxing 时间: 2010-4-5 10:40
原帖由 daohe 于 2010-4-5 00:40 发表
按2楼要求修改后,测试没任何变化,测试不成功!
测试代码:
@echo off
echo 测试1标记>1.txt
dir D:\images /b /s /a>>1.txt
call shili.bat
echo 测试2标记>>1.txt
dir D:\images /b /s /a>>1.txt
返回信息:
测试1标记
D:\images\a.jpg
D:\images\b.jpg
D:\images\c.jpg
D:\images\d.jpg
D:\images\e.jpg
D:\images\f.jpg
测试2标记
D:\images\a.jpg
D:\images\aaa
D:\images\b.jpg
D:\images\c.jpg
D:\images\d.jpg
D:\images\e.jpg
D:\images\f.jpg
D:\images\aaa\bbb
D:\images\aaa\d.jpg
D:\images\aaa\bbb\a.jpg
D:\images\aaa\bbb\b.jpg
D:\images\aaa\bbb\c.jpg
原帖由 sgaizxt001 于 2010-4-5 09:05 发表
2楼的代码错无没有将“|”转义,如果不转义的话,会被CMD理解为管道符
delims=中允许使用 | 。
原帖由 sgaizxt001 于 2010-4-5 09:16 发表
不过他的代码我没测试,不知道怎么样。
我觉得用 if not /i "!str~-3!" == "jpg" 来判断是否md还是copy的话应该可以不用添加|。
不使用字符串检测可以忽略 a.txt 中的文件类型
作者: bat007 时间: 2010-4-5 10:46 标题: 回复 4楼 的帖子
以后多试验一下再说别人的错^_^
作者: daohe 时间: 2010-4-5 15:56 标题: 回复 2楼 的帖子
2楼测试结果还是不对
在看看,谢谢!
作者: hanyeguxing 时间: 2010-4-5 16:04
原帖由 daohe 于 2010-4-5 15:56 发表
2楼测试结果还是不对
2342
在看看,谢谢!
写出你是什么系统的,
贴上你的批处理脚本和a.txt
作者: daohe 时间: 2010-4-5 16:24 标题: 回复 9楼 的帖子
- @echo off
- for /F "tokens=1* delims=|" %%a in (D:\a.txt) do for /F "tokens=1*" %%c in ("%%a") do call:hanye %%c\%%d %%b
- goto :eof
- :hanye
- if not exist "D:\images\%1" md "D:\images\%1"
- if not "%2"=="" copy "D:\images\%2" "D:\images\%1">nul&shift/2&goto hanye
复制代码
作者: more 时间: 2010-4-5 16:35
- @echo off
- setlocal enabledelayedexpansion
- set "dstDrv=d:"
- ::aaa文件夹所在的目录
- set "srcPth=D:\images"
- ::源文件目录
- for /f "delims=" %%a in ('type a.txt') do (
- set "dstPth="
- for %%i in (%%a) do (
- if /i not "%%~xi"==".jpg" (
- set "dstPth=!dstPth!%%i\"
- if not exist "%dstDrv%\!dstPth!" md "%dstDrv%\!dstPth!"
- ) else (
- echo.copy "%srcPth%\%%i" "%dstDrv%\!dstPth!"
- copy "%srcPth%\%%i" "%dstDrv%\!dstPth!"
- )
- )
- )
- pause
复制代码
[ 本帖最后由 more 于 2010-4-5 16:37 编辑 ]
作者: hanyeguxing 时间: 2010-4-5 17:09
奇怪了,他在这里运行正常呀
作者: daohe 时间: 2010-4-5 22:29 标题: 回复 11楼 的帖子
测试结果:
11楼完美解决!
作者: sgaizxt001 时间: 2010-4-5 23:14
没办法,初学批处理。很多原理没搞懂,不过随意批评别人不对,又学到了一点
作者: wxyz0001 时间: 2019-11-8 18:36
问题描述得真是难为了写出代码的人了
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |