中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
作者:
标题: [讨论]文件分类的问题。 上一主题 | 下一主题
yefeng2651
初级用户





积分 36
发帖 16
注册 2006-7-5
状态 离线
『楼 主』:  [讨论]文件分类的问题。

问题:

一目录下 有 N个jpg,现在想按文件名第一个_前四位数 建立文件夹 并将相应的jpg移动到对应的目录里去,即0001_*.jpg 到0001目录下、0002_*.jpg 到0002目录下

0001_0000_0000.jpg
0001_0000_0001.jpg
……
0002_0000_0000.jpg
0002_0000_0001.jpg
……

俺的答案:

@echo off
for /f "delims=_" %%i in ('dir /a-d /b *.jpg') do md %%i & move %%i_*.jpg %%i

问题如下:

E:\000>list3.cmd
E:\000\0001_0000_0000.jpg
E:\000\0001_0000_0001.jpg
子目录或文件 0001 已经存在。
存在一个重名文件,或是找不到文件。
子目录或文件 0001 已经存在。
存在一个重名文件,或是找不到文件。
E:\000\0002_0000_0000.jpg
E:\000\0002_0000_0001.jpg
子目录或文件 0002 已经存在。
存在一个重名文件,或是找不到文件。
子目录或文件 0002 已经存在。
存在一个重名文件,或是找不到文件。

E:\000>

可以看到有重复的行为。浪费资源。 请大家讨论。

2008-10-9 17:46
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
yefeng2651
初级用户





积分 36
发帖 16
注册 2006-7-5
状态 离线
『第 2 楼』:  

HAT 版 回复:

@echo off
for /f "delims=_" %%i in ('dir /a-d /b *.jpg') do (
  if not exist %%i (
    md %%i
    move %%i_*.jpg %%i
  )
)

很完美的解决问题。

E:\000>list.cmd
E:\000\0001_0000_0000.jpg
E:\000\0001_0000_0001.jpg

E:\000>

ps:在dos命令行下 这个怎么打哦?

2008-10-9 17:49
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
yefeng2651
初级用户





积分 36
发帖 16
注册 2006-7-5
状态 离线
『第 3 楼』:  

buddiyar兄:

@echo off
for /f "delims=_" %%i in ('dir /a-d /b *.jpg') do (move %%i_*.jpg %%i || md %%i && move %%i_*.jpg %%i)

好强大的脑袋啊,怎么想的??

不过美中不足,有点问题,如下:


E:\000>list2.cmd

E:\000>for /F "delims=_" %i in ('dir /a-d /b *.jpg') do (move %i_*
.jpg %i   || md %i   && move %i_*.jpg %i )

E:\000>(move 0001_*.jpg 0001   || md 0001   && move 0001_*.jpg 000
1 )
无法将多个文件移动到单个文件中。
E:\000\0001_0000_0000.jpg
E:\000\0001_0000_0001.jpg

E:\000>(move 0001_*.jpg 0001   || md 0001   && move 0001_*.jpg 000
1 )
存在一个重名文件,或是找不到文件。
子目录或文件 0001 已经存在。

E:\000>(move 0001_*.jpg 0001   || md 0001   && move 0001_*.jpg 000
1 )
存在一个重名文件,或是找不到文件。
子目录或文件 0001 已经存在。

E:\000>(move 0001_*.jpg 0001   || md 0001   && move 0001_*.jpg 000
1 )
存在一个重名文件,或是找不到文件。
子目录或文件 0001 已经存在。



E:\000\0002_0000_0000.jpg
E:\000\0002_0000_0001.jpg

E:\000>(move 0002_*.jpg 0002   || md 0002   && move 0002_*.jpg 000
2 )
存在一个重名文件,或是找不到文件。
子目录或文件 0002 已经存在。

E:\000>(move 0002_*.jpg 0002   || md 0002   && move 0002_*.jpg 000
2 )
存在一个重名文件,或是找不到文件。
子目录或文件 0002 已经存在。

E:\000>


------------

不知如何解决!

2008-10-9 17:54
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
yefeng2651
初级用户





积分 36
发帖 16
注册 2006-7-5
状态 离线
『第 4 楼』:  

最后谢谢各位帮助我的,及群里的各位听我唠叨的。
留下痕迹,以助后来者 :)

2008-10-9 17:56
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Vampire
初级用户





积分 176
发帖 78
注册 2007-4-15
状态 离线
『第 5 楼』:  

纯DOS好象FOR就支持环境变量的读取...........

2008-10-9 17:56
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
buddiyar
初级用户





积分 160
发帖 75
注册 2006-6-28
状态 离线
『第 6 楼』:  

E:\000>(move 0001_*.jpg 0001   || md 0001   && move 0001_*.jpg 000
1 )
无法将多个文件移动到单个文件中。
E:\000\0001_0000_0000.jpg
E:\000\0001_0000_0001.jpg

这个错误提示很奇怪啊 我不理解 那个单个文件 是什么东西  怎么来的?

2008-10-9 18:37
查看资料  发送邮件  发短消息 网志  OICQ (243589543)  编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 7 楼』:  Re 3楼

这样可以么?
@echo off
for /f "delims=_" %%i in ('dir /a-d /b *.jpg') do (move %%i_*.jpg %%i 2>nul|| md %%i && move %%i_*.jpg %%i)




2008-10-9 20:00
查看资料  发短消息 网志   编辑帖子  回复  引用回复
yefeng2651
初级用户





积分 36
发帖 16
注册 2006-7-5
状态 离线
『第 8 楼』:  



  Quote:
Originally posted by buddiyar at 2008-10-9 18:37:
E:\000>(move 0001_*.jpg 0001   || md 0001   && move 0001_*.jpg 000
1 )
无法将多个文件移动到单个文件中。
E:\000\0001_0000_0000.jpg
E:\000\0001_0000_0001.jpg

这个错 ...

换成

@echo off
for /f "delims=_" %%i in ('dir /a-d /b *.jpg') do (@echo %%i_*.jpg %%i || md %%i && move %%i_*.jpg %%i)

Microsoft Windows XP [版本 5.1.2600]
(C) 版权所有 1985-2001 Microsoft Corp.

E:\000>list2.cmd
0000_*.jpg 0000
0000_*.jpg 0000
0000_*.jpg 0000
0000_*.jpg 0000
0001_*.jpg 0001
0001_*.jpg 0001
0001_*.jpg 0001
0001_*.jpg 0001

E:\000>


————————

之前 我也出现过这个问题,是因为 do 后加了 括号的问题

我的理解是 可以不能识别*的缘故,等高人指点! :)

[ Last edited by yefeng2651 on 2008-10-10 at 15:20 ]

2008-10-10 14:51
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
yefeng2651
初级用户





积分 36
发帖 16
注册 2006-7-5
状态 离线
『第 9 楼』:  



  Quote:
Originally posted by HAT at 2008-10-9 20:00:
这样可以么?
@echo off
for /f "delims=_" %%i in ('dir /a-d /b *.jpg') do (move %%i_*.jpg %%i 2>nul|| md %%i && move %%i_*.jpg %%i)

出现的是这个:


E:\000>list4.cmd
E:\000\0000_0000.jpg
E:\000\0000_0001.jpg
E:\000\0000_0002.jpg
E:\000\0000_0003.jpg
子目录或文件 0000 已经存在。
子目录或文件 0000 已经存在。
子目录或文件 0000 已经存在。
E:\000\0001_0000.jpg
E:\000\0001_0001.jpg
E:\000\0001_0002.jpg
E:\000\0001_0003.jpg
子目录或文件 0001 已经存在。
子目录或文件 0001 已经存在。
子目录或文件 0001 已经存在。
E:\000\0002_0000.jpg
E:\000\0002_0001.jpg
E:\000\0002_0002.jpg
E:\000\0002_0003.jpg
子目录或文件 0002 已经存在。
子目录或文件 0002 已经存在。
子目录或文件 0002 已经存在。

E:\000>

2008-10-10 14:54
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
tireless
银牌会员





积分 2025
发帖 1122
注册 2007-9-5
状态 离线
『第 10 楼』:  


@echo off
for /f "delims=_" %%a in ('dir /b *.jpg') do (
     if not exist %%a md %%a
     if exist %%a_*.jpg move /y %%a_*.jpg %%a>nul
)
[ Last edited by tireless on 2008-10-10 at 17:38 ]

2008-10-10 16:13
查看资料  发短消息 网志   编辑帖子  回复  引用回复
huahua0919
银牌会员




积分 1608
发帖 780
注册 2007-10-7
状态 离线
『第 11 楼』:  


@echo off
for /f "tokens=1* delims=_" %%i in ('dir/b/a-d *.jpg') do (
md %%i >nul 2>nul
move /y "%%i_%%j" %%i
)


2008-10-10 16:24
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
yefeng2651
初级用户





积分 36
发帖 16
注册 2006-7-5
状态 离线
『第 12 楼』:  



  Quote:
Originally posted by tireless at 2008-10-10 16:13:
@echo off
for /f "delims=_" %%a in ('dir /b *.jpg') do (
     if not exist %%a md %%a
     if exist %%a_*.jpg move /y %%a_*.jpg %%a>nul
)
[ Last edited by tireless ...

呵呵,兄弟改得可真快,不过, /y 加与不加都没有关系的。没有出错的问题。

  Quote:
Originally posted by huahua0919 at 2008-10-10 16:24:
@echo off
for /f "tokens=1* delims=_" %%i in ('dir/b/a-d *.jpg') do (
md %%i >nul 2>nul
move /y "%%i_%%j" %%i
)

11楼的兄弟,你最狠,直接给屏蔽了。所以我也没有看到错误,不过可以肯定 一定有错误。只是我没看到 :P

2008-10-10 17:48
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
tireless
银牌会员





积分 2025
发帖 1122
注册 2007-9-5
状态 离线
『第 13 楼』:  

 

[ Last edited by tireless on 2008-10-10 at 23:00 ]

2008-10-10 18:40
查看资料  发短消息 网志   编辑帖子  回复  引用回复
huahua0919
银牌会员




积分 1608
发帖 780
注册 2007-10-7
状态 离线
『第 14 楼』:  

什么叫错误?如果又错误那就是你文件下所有JPG文件的格式不是你所说的那样,如果要用exist来判断说效率最高,那用>2的效率不知道要比exist快多少倍!

你说呢?

2008-10-10 18:48
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: