Windows CMD命令之强大的for命令

因为工作需要,需要把一个目录下每个子文件夹里面的所有的MIDlet文件提取到其根目录下,就是目录遍历的问题。之前都是手动机械的重复劳动,就觉着机械劳动肯定可以用代码解决。for命令最适合干这个了。一直觉得Windows的命令应该就能搞定,但是里面的for命令以前接触过,没怎么用过,觉得很复杂。

今天上班又要这样重复劳动,就打算正式开始着手写个解决方案。下面包括了自己的思维走向:

初版
本来打算用java写的,后来发现太麻烦,就变成了java+bat的组合:

  • 先用java写了个输出每个第一层文件夹的方法:用File.io挺简单的,网上能搜到很多。然后用参数作为输入来觉得对哪个目录进行整理

    import java.io.File;   

    public class FolderSort {   

    public static void main(String[] args) {  
    try{
            String path = args[0];
            getFile(path);  
            }
    catch (IndexOutOfBoundsException ioobe){
        System.out.println("Plz enter the entire path of the directory as the argument");
        }
    catch (NullPointerException npe){
        System.out.println("Plz enter correct path, such as C:\Folder");
        }  

    private static void getFile(String path){  
            File file = new File(path);  
            File[] array = file.listFiles();  

    for(int i=0;i<array.length;i++){  
    if(array[i].isDirectory()){  
    System.out.println(array[i].getPath());  
       }
     
    }
    }

    }

  • 写完这些后就发现用Java实现太复杂了。Java对文件的操作哪有Windows命令来得快。然后就想用上面代码生成的目录单个用for语句循环操作。然后就有了下面的第一版批处理文件(.bat)

    @echo off
    java FolderSort D:\Test > tmp.txt
    for /f %%i in (tmp.txt) do (move .\%%i\subfolder1\*.* .\%%i)

  • 后来又想着直接放在同一目录下就不用输入那个路径(D:\Test),添加修改成如下版本:

    @echo off
    cd >tmp.txt
    for /f %%i in (tmp.txt) do (java FolderSort %%i > tmp.txt)
    for /f %%i in (tmp.txt) do (move .\%%i\subfolder1\*.* .\%%i)

    终极版:
    回到家后觉得肯定有直接用Windows命令的方法,用到Java和cmd也太不爽了点。然后在各种应用的搜索结果的找到了。其实遍历直接用dir命令就行…以下就是终极完美版啦。把以下内容保存成.bat文件然后放到需要处理的文件夹下面执行命令就搞定了

    @echo off
    dir /ad /b >tmp
    for /f %%i in (tmp) do (move .\%%i\bin\*.ja? .\%%i)
    for /f %%i in (tmp) do (rd /s/q .\%%i\bin;.\%%i\res;.\%%i\src)
    del /f/q tmp

    因为工作中的目录只有一个subfolder里面有我们要移动的文件,其它同级目录里面的文件很多,但是是没用的。如果遍历所有文件,虽然能找到自己需要的,但是效率上会不如只对那个特定的subfolder操作快。所以dir命令没有用/s参数之后得到的完整的目录名。

    后记:这个博客写着写着好像感冒了,眼睛难受。。杯具…捂汗去了

  • Advertisements

    Leave a Reply

    Fill in your details below or click an icon to log in:

    WordPress.com Logo

    You are commenting using your WordPress.com account. Log Out / Change )

    Twitter picture

    You are commenting using your Twitter account. Log Out / Change )

    Facebook photo

    You are commenting using your Facebook account. Log Out / Change )

    Google+ photo

    You are commenting using your Google+ account. Log Out / Change )

    Connecting to %s