Board logo

标题: [文件操作] [已解决]批处理按照文件夹之间的名称中的相同字符进行归类 [打印本页]

作者: pine    时间: 2009-9-17 11:11     标题: [已解决]批处理按照文件夹之间的名称中的相同字符进行归类

有以下文件夹

package_aaa_wok
package_aaa_wok_0804
package_bde_qwoo
package_bde_qwoo_0409
package_ccae_lin_un
package_ccae_lin_un_040c

想实现:
把package_aaa_wok_0804归类到package_aaa_wok文件夹里,并重命名package_aaa_wok_0804为0804

把ppackage_bde_qwoo_0409归类到package_bde_qwoo文件夹里,并重命名package_bde_qwoo_0409为0409

以此类推........

整理好的目录是这样的:

package_aaa_wok
|___0804    (也就是原来的package_aaa_wok_0804)


重命名是以 该文件夹最后四位字符来命名的,例如:0804、0409、040c (这四位字符没有规律,可以是任意字符(除特殊字符外))

我的思路是:把以上的package_aaa_wok_0804最后5位字符舍掉,然后剩余的字符串与当前文件夹进行匹配,并归类好

但用for,想了很久,没想通可以怎么实现,希望大家帮帮忙,或提供可行的思路

[ 本帖最后由 pine 于 2009-9-17 20:45 编辑 ]
作者: Lumiere    时间: 2009-9-17 12:24

  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%a in ('dir /ad /b') do (
  3.       set "str=%%a"&set "head=!str:~0,-5!"&set "tail=!str:~-4!"
  4.       if exist !head! move %%a !head!\!tail!
  5. )
  6. pause>nul
复制代码

作者: xiaofei120    时间: 2009-9-17 16:32

貌似没有理解LZ的意思。。。。
作者: Lumiere    时间: 2009-9-17 16:58     标题: 回复 3楼 的帖子

我看不见得,理解没理解等楼主自己看了帖子试过以后再说吧。
作者: pine    时间: 2009-9-17 17:05

原帖由 Lumiere 于 2009-9-17 12:24 发表
@echo off&setlocal enabledelayedexpansion
for /f "delims=" %%a in ('dir /ad /b') do (
      set "str=%%a"&set "head=!str:~0,-5!"&set "tail=!str:~-4!"
      if exist !head! move %%a !head!\!tail!
) ...


谢谢Lumiere,解决了,但是仍有点理解不过来,望能注释一下,主要是这句

      if exist !head! move %%a !head!\!tail!

如果存在!head!这个文件夹,就移动%%a

这时移动的%%a为什么一定是含有那四位字符的文件夹?(如:package_aaa_wok_0804)
作者: Lumiere    时间: 2009-9-17 17:17     标题: 回复 5楼 的帖子

因为如果不是含有那4个字符的文件夹的话,前面的if判断语句就不会有!head!,head就是截取了文件夹名中第一个字符到倒数第五个字符,如果以这个字符串命名的文件夹存在当前目录下的话,那么说明%%a就是需要move并重命名的文件夹。应该很好理解的吧。
作者: Lumiere    时间: 2009-9-17 17:57     标题: 回复 3楼 的帖子

再看了看,突然意识到哥们可能是在说自己,汗一个……
作者: xiaofei120    时间: 2009-9-17 18:28

俺就是说的我自己。。。。狂汗。。。
作者: Lumiere    时间: 2009-9-17 20:08     标题: 回复 8楼 的帖子

接着汗,那这样的语境下,你还用个“貌似”,谁都会理解你在说楼上的人。你自己想想是不是吧?呵呵
作者: Fashioner    时间: 2009-9-18 12:51

2楼的代码毋庸置疑是正确的,在代码set "str=%%a"&set "head=!str:~0,-5!"&set "tail=!str:~-4!"中,为什么要在str=%%a两边加引号呢?去掉又显示不对,而一般状况下是不加引号的,这是为什么了?
作者: Lumiere    时间: 2009-9-18 13:16     标题: 回复 10楼 的帖子

在这里去掉应该也不会错的,加引号是比较好的书写习惯,可以避免一些因为特殊字符引起的问题。你再试一下,可能你去引号的时候弄错了、




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2