标题: [讨论]文件分类的问题。
[打印本页]
作者: yefeng2651
时间: 2008-10-9 17:46
标题: [讨论]文件分类的问题。
问题:
一目录下 有 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>
可以看到有重复的行为。浪费资源。 请大家讨论。
作者: yefeng2651
时间: 2008-10-9 17:49
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命令行下 这个怎么打哦?
作者: yefeng2651
时间: 2008-10-9 17:54
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>
------------
不知如何解决!
作者: yefeng2651
时间: 2008-10-9 17:56
最后谢谢各位帮助我的,及群里的各位听我唠叨的。
留下痕迹,以助后来者 :)
作者: Vampire
时间: 2008-10-9 17:56
纯DOS好象FOR就支持环境变量的读取...........
作者: buddiyar
时间: 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
这个错误提示很奇怪啊 我不理解 那个单个文件 是什么东西 怎么来的?
作者: HAT
时间: 2008-10-9 20:00
标题: 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)
作者: yefeng2651
时间: 2008-10-10 14:51
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 ]
作者: yefeng2651
时间: 2008-10-10 14:54
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>
作者: tireless
时间: 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 on 2008-10-10 at 17:38 ]
作者: huahua0919
时间: 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
)
作者: yefeng2651
时间: 2008-10-10 17:48
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
作者: tireless
时间: 2008-10-10 18:40
[
Last edited by tireless on 2008-10-10 at 23:00 ]
作者: huahua0919
时间: 2008-10-10 18:48
什么叫错误?如果又错误那就是你文件下所有JPG文件的格式不是你所说的那样,如果要用exist来判断说效率最高,那用>2的效率不知道要比exist快多少倍!
你说呢?