标题: [文件操作] [已解决]批处理怎么移动多级目录下的文件到其顶层目录下 [打印本页]
作者: zhenzhu 时间: 2023-11-22 14:27 标题: [已解决]批处理怎么移动多级目录下的文件到其顶层目录下
本帖最后由 zhenzhu 于 2023-11-22 17:12 编辑
例如一个文件夹下有这样的几个子文件夹,里面的目录结构是这样:
A01/001/1.jpg
A02/002/002/aaa.jpg
A256/256/256/a/1.txt
A256/256/256/b/1.txt
就是想把001 256 这样的纯数字目录给删掉,但是最里面的文件或者文件夹给移动到最上层的目录下面,使其变成如下格式:
A01/1.jpg
A02/aaa.jpg
A256/a/1.txt
A256/b/1.txt
作者: /zhqsystem/zhq 时间: 2023-11-22 14:51
本帖最后由 /zhqsystem/zhq 于 2023-11-22 19:17 编辑
回复三楼代码修改:保留了目录树命名但是没进行你的那种改变,rem行是复制的执行RD行是删除空的文件夹千万不要加/s/q参数- SetLocal EnableDelayedExpansion
- for /f "delims=" %%i in ('dir/ad/b ".\*.*"')do for /f "delims=" %%j in (".\%%~nxi")do for /f "delims=" %%k in ('dir/a-d/s/b "%%~fj\*.*"')do (
- set "#=%%~fk"&&set "#=!#:%%~fj=!"&&set "#=!#:\=$!"
- rem xcopy /y "%%~fk" "%%~fj\!#!"&del/q "%%~fk\!#!"
- rem del/q "%%~fk"
- ren "%%~fk" "!#!"
- move "%%~dpk!#!" "%%~fj\"
- rd "%%~dpk"&rd "%%~dpk..\"&rd "%%~dpk..\..\"&rd "%%~dpk..\..\..\"
- )
复制代码
作者: zhenzhu 时间: 2023-11-22 15:35
/zhqsystem/zhq 发表于 2023-11-22 14:51
谢谢,这个可以把文件都移动到顶层来,不过有个小问题,
例如A256/256/256/a/1.txt,运行脚本后就变成了A256/1.txt,没有保留a/1.txt的目录结构,因为有文件有重名,所以要保留除数字目录外的文件结构,有什么办法可以改进吗
作者: 77七 时间: 2023-11-22 15:44
- @echo off
- cd /d "%~dp0"
- for /d %%d in (*) do (
- pushd "%%d"
- for /f "delims=" %%i in ('dir /b /s /ad ^|sort /r') do (
- echo %%~nxi|findstr /rc:"^[0-9][0-9]*$" 1>nul && (
- robocopy "%%i" . /e /move
- )
- )
- popd
- )
- pause
复制代码
作者: pd1 时间: 2023-11-22 15:50
当前目录和所有父目录都不要存在纯数字的文件夹- <# :
- @echo off
- powershell -NoProfile -ExecutionPolicy bypass "Get-Content -literal '%~f0' |Out-String|Invoke-Expression"
- pause
- #>
- ls -Recurse -File|%{$newpath=($_.Directory.ToString()+"\") -replace "\\\d+(?=\\)","";if(-not (Test-Path $newpath)){md $newpath};Move-Item $_.FullName $newpath}
- $p=@()
- ls -Recurse -Directory|%{$p+=$_.FullName+"\"}
- ($p.Length-1)..0|?{$p[$_] -match "\\\d+(?=\\)"}|%{rd $p[$_]}
复制代码
作者: zhenzhu 时间: 2023-11-22 16:04
当前目录和所有父目录都不要存在纯数字的文件夹
pd1 发表于 2023-11-22 15:50
谢谢,不过有个小问题,这个脚本会把最顶层的A01 A02等目录也删掉了
作者: zhenzhu 时间: 2023-11-22 16:05
77七 发表于 2023-11-22 15:44
太对了哥,就是这样的,谢谢
作者: zhenzhu 时间: 2023-11-22 16:18
77七 发表于 2023-11-22 15:44
不过用robocopy会把文件都复制一次,内容很多的话就很耗时,如果有大文件就更慢了
作者: pd1 时间: 2023-11-22 16:56
回复 6# zhenzhu
我测试没问题。可以发一下A01里面的文件的全路径看一下
作者: 77七 时间: 2023-11-22 17:04
回复 8# zhenzhu
- @echo off
- cd /d "%~dp0"
- for /d %%d in (*) do (
- pushd "%%d"
- for /f "delims=" %%i in ('dir /b /s /ad ^|sort /r') do (
- echo %%~nxi|findstr /rc:"^[0-9][0-9]*$" 1>nul && (
- for /f "delims=" %%x in ('dir /b "%%i"') do (
- move /-y "%%i\%%x" .
- )
- rd "%%i"
- )
- )
- popd
- )
- pause
复制代码
作者: zhenzhu 时间: 2023-11-22 17:06
本帖最后由 zhenzhu 于 2023-11-22 17:09 编辑
回复 zhenzhu
我测试没问题。可以发一下A01里面的文件的全路径看一下
pd1 发表于 2023-11-22 16:56
我的我的,我之前测试改了名称,顶层文件夹目录也是纯数字的,所以也被删掉了,这个脚本是没问题的,完美解决,谢谢老哥
作者: zhenzhu 时间: 2023-11-22 17:09
回复 zhenzhu
77七 发表于 2023-11-22 17:04
完美解决了,谢谢老哥
作者: zhenzhu 时间: 2023-11-22 17:28
回复 zhenzhu
我测试没问题。可以发一下A01里面的文件的全路径看一下
pd1 发表于 2023-11-22 16:56
我后面测试又发现点小问题,如果父文件夹的名称有特殊字符,就无法处理了
中文 对照_3(2016) √
中文 对照-2(2019) √
中文 对照1(2019)[x5-x6] ×
应该是因为中括号的问题
------------------------------
md : 具有指定名称 C:\Users\Administrator\Desktop\test - 副本\中文 对照1(2019)[x5-x6]\ 的项已存在。
所在位置 行:6 字符: 116
+ ... ce "\\\d+(?=\\)","";if(-not (Test-Path $newpath)){md $newpath};Move-I ...
+ ~~~~~~~~~~~
+ CategoryInfo : ResourceExists: (C:\Users\Admini...1(2019)[x5-x6]\:String) [New-Item], IOException
+ FullyQualifiedErrorId : DirectoryExist,Microsoft.PowerShell.Commands.NewItemCommand
md : 具有指定名称 C:\Users\Administrator\Desktop\test - 副本\中文 对照1(2019)[x5-x6]\ 的项已存在。
所在位置 行:6 字符: 116
+ ... ce "\\\d+(?=\\)","";if(-not (Test-Path $newpath)){md $newpath};Move-I ...
+ ~~~~~~~~~~~
+ CategoryInfo : ResourceExists: (C:\Users\Admini...1(2019)[x5-x6]\:String) [New-Item], IOException
+ FullyQualifiedErrorId : DirectoryExist,Microsoft.PowerShell.Commands.NewItemCommand
md : 具有指定名称 C:\Users\Administrator\Desktop\test - 副本\中文 对照1(2019)[x5-x6]\ 的项已存在。
所在位置 行:6 字符: 116
+ ... ce "\\\d+(?=\\)","";if(-not (Test-Path $newpath)){md $newpath};Move-I ...
+ ~~~~~~~~~~~
+ CategoryInfo : ResourceExists: (C:\Users\Admini...1(2019)[x5-x6]\:String) [New-Item], IOException
+ FullyQualifiedErrorId : DirectoryExist,Microsoft.PowerShell.Commands.NewItemCommand
作者: Five66 时间: 2023-11-22 22:23
这样的目录结构:
A256\256\256\aaa\255\1.txt
结果是啥?
是 A256\1.txt ?
还是 A256\aaa\1.txt ?
又或者 A256\aaa\255\1.txt ?
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |