找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 26554|回复: 5

[文件操作] [已解决]批量移动目录的批处理操作求助

[复制链接]
发表于 2020-8-17 20:36:51 | 显示全部楼层 |阅读模式
要求:比如我有多级目录及子目录,每个的子目录的层级和个数都不相同,如下图示例:
F:\1LEVEL
├─2aLevel
│  ├─3a1level
│  │  └─4a1level
│  │      └─5a1level
│  ├─3a2level
│  └─3a3level
├─2bLevel
│  ├─3b1level
│  ├─3b2level
│  │  └─4b2level
│  │      └─5b2level
│  └─3b3level
└─2cLevel
    ├─3c1level
    ├─3c2level
    └─3c3level
我需要,比如我在1level目录下,运行这个批处理,自动将所有的3??level及它下面的子目录和文件,全部上移一层到1level目录下。
做成,可以输入的如下:
请输入要移动的目录层级数:3
请输入要移动到的目录层级数:1
也就是这个批处理,可以将5级、4级或者3级目录,全部移动到它的上一层或者上二层目录的操作。具体要怎么移动几级,可以由我输入。只上移,不用下移。就相当于剪切和粘贴到上一级目录或者上二级目录的操作,但是目录超多,量很多,所以我需要批量处理。
当然这里是举例,实际的目录,目录名没有相同关健字,名字没有规律,也有中文字符,有的目录还有.  
感谢各位大神的精秒代码。
 楼主| 发表于 2020-8-17 22:35:30 | 显示全部楼层
不知道,是不是我没有描述清楚,还是真的很难
在这个示例,我的需求,单独操作就像如下:
move "F:\1Level\2aLevel\3a1level"   "F:\1Level\"
move "F:\1Level\2aLevel\3a2level"   "F:\1Level\"
move "F:\1Level\2aLevel\3a3level"   "F:\1Level\"
move "F:\1Level\2bLevel\3b1level"   "F:\1Level\"
move "F:\1Level\2bLevel\3b2level"   "F:\1Level\"
move "F:\1Level\2bLevel\3b3level"   "F:\1Level\"
move "F:\1Level\2cLevel\3c1level"   "F:\1Level\"
move "F:\1Level\2cLevel\3c2level"   "F:\1Level\"
move "F:\1Level\2cLevel\3c3level"   "F:\1Level\"
但是我想批量操作,但是不知道,如何只获取三级目录,二级目录和一级目录的变量,所以想求助各位大神。
发表于 2020-8-17 23:04:19 | 显示全部楼层
先测试再用
遍历每个目录,速度慢
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set /p "src=请输入要移动的目录层级数:"
  4. set /p "desc=请输入要移动到的目录层级数:"
  5. echo -----------------------
  6. set /a "up=%src%-%desc%+1"
  7. for /r /d %%i in (*) do (
  8.         cd /d "%%i"
  9.         for /l %%a in (1,1,%src%) do cd ..
  10.         if "!cd!"=="%~dp0" (
  11.                 echo 移动 %%i
  12.                 cd /d "%%i"
  13.                 for /l %%a in (1,1,%up%) do cd ..
  14.                 echo 移到 !cd!
  15.                 move /y "%%i" "!cd!" >nul && echo 成功 || echo 失败
  16.                 echo -------------------
  17.         )
  18. )
  19. pause&exit
复制代码

评分

参与人数 1技术 +1 收起 理由
yhcfsr + 1 思路清晰

查看全部评分

发表于 2020-8-17 23:16:10 | 显示全部楼层
bat所在目录算第一层,下级目录算第二层
移动第二层(下一层)到第一层(当前层)就输入 2 1
 楼主| 发表于 2020-8-17 23:37:43 | 显示全部楼层
回复 4# went
太感谢了,大神,先测试了几次,没问题,拿到实际目录测试了一下,成功了。
几天的工作,不到10分钟全搞定了,不错,不错。没有报错。
太开心了,再次感谢您的帮助
发表于 2020-8-18 11:45:50 | 显示全部楼层
本帖最后由 WHY 于 2020-8-18 12:45 编辑

Test.ps1
  1. $srcLevel = Read-Host '移动前的层级数';
  2. $dstLevel = Read-Host '移动后的层级数';
  3. dir ('.\' + '*\' * $srcLevel) -Dir | forEach{
  4.     move -Literal $_.FullName -Dest ($_.FullName + '\..' * ($srcLevel - $dstLevel + 1) + '\') -Force;
  5. }
  6. pause
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-20 04:33 , Processed in 0.017626 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表