找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 33081|回复: 14

[文件操作] [已解决]批处理怎样批量复制a.txt中文件到文件夹?

[复制链接]
发表于 2010-4-4 17:13:25 | 显示全部楼层 |阅读模式
例如有大量图片在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 编辑 ]

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢主动给标题标注[已解决]字样

查看全部评分

发表于 2010-4-5 00:04:44 | 显示全部楼层
  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
 楼主| 发表于 2010-4-5 00:40:01 | 显示全部楼层
按2楼要求修改后,测试没任何变化,测试不成功!
发表于 2010-4-5 09:05:47 | 显示全部楼层
2楼的代码错无没有将“|”转义,如果不转义的话,会被CMD理解为管道符
发表于 2010-4-5 09:16:59 | 显示全部楼层
不过他的代码我没测试,不知道怎么样。
我觉得用  if not /i "!str~-3!" == "jpg" 来判断是否md还是copy的话应该可以不用添加|。
发表于 2010-4-5 10:40:27 | 显示全部楼层
原帖由 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 中的文件类型
发表于 2010-4-5 10:46:47 | 显示全部楼层

回复 4楼 的帖子

以后多试验一下再说别人的错^_^
 楼主| 发表于 2010-4-5 15:56:36 | 显示全部楼层

回复 2楼 的帖子

2楼测试结果还是不对

在看看,谢谢!
发表于 2010-4-5 16:04:54 | 显示全部楼层
原帖由 daohe 于 2010-4-5 15:56 发表
2楼测试结果还是不对
2342

在看看,谢谢!


写出你是什么系统的,
贴上你的批处理脚本和a.txt
 楼主| 发表于 2010-4-5 16:24:19 | 显示全部楼层

回复 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
复制代码
发表于 2010-4-5 16:35:20 | 显示全部楼层
  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 编辑 ]

评分

参与人数 1PB +10 收起 理由
Batcher + 10 乐于助人

查看全部评分

发表于 2010-4-5 17:09:10 | 显示全部楼层
奇怪了,他在这里运行正常呀
 楼主| 发表于 2010-4-5 22:29:47 | 显示全部楼层

回复 11楼 的帖子

测试结果:
     11楼完美解决!
发表于 2010-4-5 23:14:20 | 显示全部楼层
没办法,初学批处理。很多原理没搞懂,不过随意批评别人不对,又学到了一点
发表于 2019-11-8 18:36:55 | 显示全部楼层
问题描述得真是难为了写出代码的人了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-19 10:51 , Processed in 0.022598 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表