[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

评分人数

    • Batcher: 感谢主动给标题标注[已解决]字样PB + 2

问题描述得真是难为了写出代码的人了

TOP

没办法,初学批处理。很多原理没搞懂,不过随意批评别人不对,又学到了一点

TOP

回复 11楼 的帖子

测试结果:
     11楼完美解决!

TOP

奇怪了,他在这里运行正常呀

TOP

  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 编辑 ]
1

评分人数

TOP

回复 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
复制代码

TOP

原帖由 daohe 于 2010-4-5 15:56 发表
2楼测试结果还是不对
2342

在看看,谢谢!


写出你是什么系统的,
贴上你的批处理脚本和a.txt

TOP

回复 2楼 的帖子

2楼测试结果还是不对

在看看,谢谢!

TOP

回复 4楼 的帖子

以后多试验一下再说别人的错^_^

TOP

原帖由 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 中的文件类型

TOP

不过他的代码我没测试,不知道怎么样。
我觉得用  if not /i "!str~-3!" == "jpg" 来判断是否md还是copy的话应该可以不用添加|。

TOP

2楼的代码错无没有将“|”转义,如果不转义的话,会被CMD理解为管道符

TOP

按2楼要求修改后,测试没任何变化,测试不成功!

TOP

  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

TOP

返回列表