Board logo

标题: [已结]文件移动到含该文件名字符的批处理? [打印本页]

作者: tang0826     时间: 2008-10-25 23:32    标题: [已结]文件移动到含该文件名字符的批处理?

各位老大好。

本人有个KTV歌库需要重新归类,把一个目录下的文件移动到含文件名字符文件夹目录下(目录已批量建好)。
如:
目录名:张学友
歌曲名:张学友-夕阳醉了.wmv
                ……
        张学友-心如刀割.wmv


要求把“张学友-夕阳醉了.wmv……张学友-心如刀割.wmv”等文件移动到张学友目录下。当然还有N个其他歌手的歌曲。

求助各位老大们!!谢谢了。

[ Last edited by HAT on 2008-10-27 at 14:12 ]
作者: bat-zw     时间: 2008-10-25 23:59

假设批量建立的目录是在d:\music下
@echo off
for /f "delims=" %%a in ('dir /s /a-d /b d:\*.wmv') do (
     for /f "delims=-" %%i in ("%%~na") do move /y "%%a" d:\music\%%i\
)
echo 搞定了!&pause>nul

作者: tireless     时间: 2008-10-26 01:16

@echo off
cd /d "d:\music\"
for /f "delims=" %%a in ('dir /a:d /b') do (
  move /y "%%a*" "%%a" >nul 2>nul
)
以上代码适用于文件不存在于子文件夹中。请问楼主,歌曲文件有在子文件夹中吗?

如果存在于子文件夹中,用下面的:
@echo off
cd /d "D:\music\"
for /f "delims=" %%a in ('dir /a:d /b') do (
  for /f "delims=" %%b in ('dir /s /a:-d /b "%%a*" 2^>nul') do (
    move "%%b" "%%a" >nul 2>nul
  )
)
[ Last edited by tireless on 2008-10-26 at 01:47 ]
作者: tang0826     时间: 2008-10-26 21:43
谢谢老大们。我去试试
作者: tang0826     时间: 2008-10-26 22:02
如果该目录下的空歌手目录没有建立,怎么用一个批量文件先建立歌手目录后移动相应文件到相应歌手目录?再次感谢!!

[ Last edited by tang0826 on 2008-10-26 at 22:04 ]
作者: tireless     时间: 2008-10-26 22:21
疑问:
1.文件有在子文件夹中吗?

2.文件名都是这种规则?

张学友-夕阳醉了.wmv
周杰伦-彩虹.mp3

(短横线 -是全角的?)
作者: tang0826     时间: 2008-10-26 22:33
有子文件夹,文件名全都改为了全角短横线的。

谢谢!!
作者: tireless     时间: 2008-10-26 23:07

@echo off
cd /d "D:\music\"
for /f "delims=-" %%a in ('dir /s /a:-d /b') do (
  md "%%~na" 2>nul
  move "%%~a*" "%%~na" 2>nul >nul
)

作者: tang0826     时间: 2008-10-27 13:11


  Quote:
Originally posted by tireless at 2008-10-26 11:07 PM:
[code]@echo off
cd /d "D:\music\"
for /f "delims=-" %%a in ('dir /s /a:-d /b') do (
  md "%%~na" 2>nul
  move "%%~a*" "%%~na" 2>nul > ...

这段代码没有成功,老大!
作者: tireless     时间: 2008-10-27 13:25    标题: Re 9 楼

执行结果是什么?替换了其中的 D:\music\ 吗?
作者: tang0826     时间: 2008-10-27 13:32
结果是产生一个“%~na”的空目录。
作者: tireless     时间: 2008-10-27 13:38
请问你替换了其中的 D:\music\ 吗?这个要换成你的那个音乐文件目录。
作者: tang0826     时间: 2008-10-27 13:40
是替换了的,G:\KTV\
作者: tireless     时间: 2008-10-27 13:55
以下是我做的测试:

执行批处理前的文件分布:

G:\KTV>tree /f
卷 文件 的文件夹 PATH 列表
卷序列号码为 000007C0 02C4:B98C
G:.
│  周杰伦- 魔杰座-11 稻香.mp3

├─2
│      林俊杰 -江南.wmv

└─3
    │  蔡依林-love love love.mp3
    │
    └─新建文件夹
            林俊杰 - - 就是我.mp3

执行批处理后的文件分布:

G:\KTV>tree /f
卷 文件 的文件夹 PATH 列表
卷序列号码为 000007C0 02C4:B98C
G:.
├─2
├─3
│  └─新建文件夹
├─周杰伦
│      周杰伦- 魔杰座-11 稻香.mp3

├─林俊杰
│      林俊杰 -江南.wmv
│      林俊杰 - - 就是我.mp3

└─蔡依林
        蔡依林-love love love.mp3

[ Last edited by tireless on 2008-10-28 at 16:57 ]
作者: tang0826     时间: 2008-10-27 14:04
谢谢老大了,把这段代码中的全角"-"替换为半角的"-"就行了。谢谢了


for /f "delims=-" %%a in ('dir /s /a:-d /b') do (
for /f "delims=-" %%a in ('dir /s /a:-d /b') do (

[ Last edited by tang0826 on 2008-10-27 at 14:07 ]
作者: tireless     时间: 2008-10-27 14:06    标题: Re 15 楼

晕,是你说的全角的...
作者: tang0826     时间: 2008-10-27 14:08
呵呵,是我的错,再次感谢!!