标题: [文件操作] [已解决]批量移动目录的批处理操作求助 [打印本页]
作者: thp2008 时间: 2020-8-17 20:36 标题: [已解决]批量移动目录的批处理操作求助
要求:比如我有多级目录及子目录,每个的子目录的层级和个数都不相同,如下图示例:
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级目录,全部移动到它的上一层或者上二层目录的操作。具体要怎么移动几级,可以由我输入。只上移,不用下移。就相当于剪切和粘贴到上一级目录或者上二级目录的操作,但是目录超多,量很多,所以我需要批量处理。
当然这里是举例,实际的目录,目录名没有相同关健字,名字没有规律,也有中文字符,有的目录还有.
感谢各位大神的精秒代码。
作者: thp2008 时间: 2020-8-17 22:35
不知道,是不是我没有描述清楚,还是真的很难
在这个示例,我的需求,单独操作就像如下:
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\"
但是我想批量操作,但是不知道,如何只获取三级目录,二级目录和一级目录的变量,所以想求助各位大神。
作者: went 时间: 2020-8-17 23:04
先测试再用
遍历每个目录,速度慢- @echo off
- setlocal enabledelayedexpansion
- set /p "src=请输入要移动的目录层级数:"
- set /p "desc=请输入要移动到的目录层级数:"
- echo -----------------------
- set /a "up=%src%-%desc%+1"
- for /r /d %%i in (*) do (
- cd /d "%%i"
- for /l %%a in (1,1,%src%) do cd ..
- if "!cd!\"=="%~dp0" (
- echo 移动 %%i
- cd /d "%%i"
- for /l %%a in (1,1,%up%) do cd ..
- echo 移到 !cd!
- move /y "%%i" "!cd!" >nul && echo 成功 || echo 失败
- echo -------------------
- )
- )
- pause&exit
复制代码
作者: went 时间: 2020-8-17 23:16
bat所在目录算第一层,下级目录算第二层
移动第二层(下一层)到第一层(当前层)就输入 2 1
作者: thp2008 时间: 2020-8-17 23:37
回复 4# went
太感谢了,大神,先测试了几次,没问题,拿到实际目录测试了一下,成功了。
几天的工作,不到10分钟全搞定了,不错,不错。没有报错。
太开心了,再次感谢您的帮助
作者: WHY 时间: 2020-8-18 11:45
本帖最后由 WHY 于 2020-8-18 12:45 编辑
Test.ps1- $srcLevel = Read-Host '移动前的层级数';
- $dstLevel = Read-Host '移动后的层级数';
- dir ('.\' + '*\' * $srcLevel) -Dir | forEach{
- move -Literal $_.FullName -Dest ($_.FullName + '\..' * ($srcLevel - $dstLevel + 1) + '\') -Force;
- }
- pause
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |