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

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

要求:比如我有多级目录及子目录,每个的子目录的层级和个数都不相同,如下图示例:
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级目录,全部移动到它的上一层或者上二层目录的操作。具体要怎么移动几级,可以由我输入。只上移,不用下移。就相当于剪切和粘贴到上一级目录或者上二级目录的操作,但是目录超多,量很多,所以我需要批量处理。
当然这里是举例,实际的目录,目录名没有相同关健字,名字没有规律,也有中文字符,有的目录还有.  
感谢各位大神的精秒代码。

不知道,是不是我没有描述清楚,还是真的很难
在这个示例,我的需求,单独操作就像如下:
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\"
但是我想批量操作,但是不知道,如何只获取三级目录,二级目录和一级目录的变量,所以想求助各位大神。

TOP

先测试再用
遍历每个目录,速度慢
  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

评分人数

TOP

bat所在目录算第一层,下级目录算第二层
移动第二层(下一层)到第一层(当前层)就输入 2 1

TOP

回复 4# went
太感谢了,大神,先测试了几次,没问题,拿到实际目录测试了一下,成功了。
几天的工作,不到10分钟全搞定了,不错,不错。没有报错。
太开心了,再次感谢您的帮助

TOP

本帖最后由 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
复制代码

TOP

返回列表