[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

有以下文件夹

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 编辑 ]
1

评分人数

    • keen: 感谢主动给标题标注[已解决]字样PB + 2

  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
复制代码
1

评分人数

    • keen: 热心帮助!PB + 11
Still with wax

TOP

貌似没有理解LZ的意思。。。。

TOP

回复 3楼 的帖子

我看不见得,理解没理解等楼主自己看了帖子试过以后再说吧。
Still with wax

TOP

原帖由 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)

TOP

回复 5楼 的帖子

因为如果不是含有那4个字符的文件夹的话,前面的if判断语句就不会有!head!,head就是截取了文件夹名中第一个字符到倒数第五个字符,如果以这个字符串命名的文件夹存在当前目录下的话,那么说明%%a就是需要move并重命名的文件夹。应该很好理解的吧。
Still with wax

TOP

回复 3楼 的帖子

再看了看,突然意识到哥们可能是在说自己,汗一个……
Still with wax

TOP

俺就是说的我自己。。。。狂汗。。。

TOP

回复 8楼 的帖子

接着汗,那这样的语境下,你还用个“貌似”,谁都会理解你在说楼上的人。你自己想想是不是吧?呵呵
Still with wax

TOP

2楼的代码毋庸置疑是正确的,在代码set "str=%%a"&set "head=!str:~0,-5!"&set "tail=!str:~-4!"中,为什么要在str=%%a两边加引号呢?去掉又显示不对,而一般状况下是不加引号的,这是为什么了?

TOP

回复 10楼 的帖子

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

TOP

返回列表