批处理从一个文件夹中的n个子文件夹里移动指定类型文件夹到第一级目录

就是将指定文件夹下面的文件夹及文件跨级移动,比如将第五级下面的文件夹和文件移动到第二级文件夹,然后将第三第四级空文件夹删掉

    脚本放在分区根目录执行.

    只处理分区第4级子目录(全路径为5级目录,盘符是一级目录)指定类型(示例为TXT)文件.

    看得懂的,自己修改文件类型(第2行)和目录级数(第12行).

    @set @n=0/*&echo off
    dir /a-d/s/b *.txt|cscript -nologo -E:jscript "%~f0"
    pause&exit */

    var fso=new ActiveXObject('scripting.FileSystemObject');
     
    while(!WSH.StdIn.AtEndOfStream)
    {
    path=WSH.StdIn.ReadLine();
    var count=0
    path.replace(/\\/g, function(){count++;});
    if(count!=5) continue;

    var NewPath=path.replace(/^(\w:\\[^\\]*).*\\([^\\]*)\\[^\\]*$/g,'$1\\$2\\')
    if(!fso.FolderExists(NewPath)) fso.CreateFolder(NewPath);
    fso.MoveFile(path, NewPath);
    }

追问

刚试了,我将文件类型改了,这个运行没反应,我需要的是将第五级文件夹(包括第四级文件夹下面的子文件和文件,文件类型XLS,JPG,DXF)移动到第一级文件夹{比如D:新建文件夹\第五级文件夹(里面包含有子文件夹和文件)},大神还能帮我指点下么?感谢

追答

    你的目录级数概念有点乱,我不确定是否理解了你的本意.姑且改下,如有问题,右上角私信留下联系方式.

    @set @n=0/*&echo off
    dir /a-d/s/b *.XLS *.JPG *.DXF|cscript -nologo -E:jscript "%~f0"
    pause&exit */
     
    var fso=new ActiveXObject('scripting.FileSystemObject');
      
    while(!WSH.StdIn.AtEndOfStream)
    {
        path=WSH.StdIn.ReadLine();
        var count=0
        path.replace(/\\/g, function(){count++;});
        if(count<5) continue;
     
        var NewPath=path.replace(/^(\w:\\[^\\]*).*\\([^\\]*)\\[^\\]*$/g,'$1\\$2\\')
        if(!fso.FolderExists(NewPath)) fso.CreateFolder(NewPath);
        fso.MoveFile(path, NewPath);
    }

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-01-12
@echo off 
for /d %%a in ("d:\a\*") do (
for /d %%b in ("%%a\*") do (
for /d %%c in ("%%b\*") do (
move "%%c" "d:\a\"
)
)
)

追问

你这个脚本好像不行。a,b,c代表的是不同的文件夹名,可能我举例的不够清楚,像下面这种结构,有一千多个文件夹要弄,
如:原路径d\:a\b1\c1\d\1.txt,现需要改成d\:a\d\1.txt
原路径d\:a1\b0\c2\d\1.txt,现需要改成d\:a1\d\1.txt
原路径d\:a2\b3\c3\d\1.txt,现需要改成d\:a2\d\1.txt

第2个回答  2019-01-13
不了噗噗噗噗噗噗
第3个回答  2019-01-12
我有的,可以分享给你,,戳我的头像看追问

图像点不开