Board logo

标题: [文件操作] [已解决]批处理怎样批量复制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

  1. @echo off
  2. for /F "tokens=1* delims=|" %%a in (D:\a.txt) do for /F "tokens=1*" %%c in ("%%a") do call:hanye %%c\%%d %%b
  3. goto :eof
  4. :hanye
  5. if not exist "D:\images\%1" md "D:\images\%1"
  6. 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楼 的帖子

  1. @echo off
  2. for /F "tokens=1* delims=|" %%a in (D:\a.txt) do for /F "tokens=1*" %%c in ("%%a") do call:hanye %%c\%%d %%b
  3. goto :eof
  4. :hanye
  5. if not exist "D:\images\%1" md "D:\images\%1"
  6. if not "%2"=="" copy "D:\images\%2" "D:\images\%1">nul&shift/2&goto hanye
复制代码

作者: more    时间: 2010-4-5 16:35

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set "dstDrv=d:"
  4. ::aaa文件夹所在的目录
  5. set "srcPth=D:\images"
  6. ::源文件目录
  7. for /f "delims=" %%a in ('type a.txt') do (
  8.   set "dstPth="
  9.   for %%i in (%%a) do (
  10.     if /i not "%%~xi"==".jpg" (
  11.       set "dstPth=!dstPth!%%i\"
  12.       if not exist "%dstDrv%\!dstPth!" md "%dstDrv%\!dstPth!"
  13.     ) else (
  14.       echo.copy "%srcPth%\%%i" "%dstDrv%\!dstPth!"
  15.       copy "%srcPth%\%%i" "%dstDrv%\!dstPth!"
  16.     )
  17.   )
  18. )
  19. 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