标题: [文件操作] [已解决]批处理如何批量提取子文件夹内的文件至最上层的文件内? [打印本页]
作者: 脑袋大 时间: 2024-1-30 10:45 标题: [已解决]批处理如何批量提取子文件夹内的文件至最上层的文件内?
『已解决』例:一级文件夹:二级文件夹:三级文件夹A,三级文件夹B,三级文件夹C......;目的:想要实现把三级文件内的所有文件提取到一级文件夹内;有方法可以实现吗?
作者: newswan 时间: 2024-1-30 11:21
如果显示正确 去掉 move 前的 echo- @echo off
-
- for /f "usebackq tokens=* delims=" %%a in (` 2^>nul dir /s /b /a-d `) do (
- if not “%%~fa” == "%CD%\%%~nxa" (
- echo move "%%~fa" .
- )
- )
复制代码
作者: newswan 时间: 2024-1-30 11:26
重新审题,三级 是 第三级? 不包括第二级
作者: 脑袋大 时间: 2024-1-30 11:59
回复 3# newswan
只把第三级文件夹内的文件提取至一级文件夹内,bat最好是在一级文件夹的上一级目录运行,能行吗大佬!
作者: binghejin 时间: 2024-1-30 13:25
本帖最后由 binghejin 于 2024-1-30 13:27 编辑
这需要你提供详细的文件夹结构,包含文件夹内都有什么文件,否则需要考虑的因素太多了,或者你需要拷贝的第三级文件夹有什么特征也可以,又或者明确就是第三级文件夹内的所有文件拷贝到一级文件夹内?- @echo off&&setlocal enabledelayedexpansion
- set num=1
- cls
- for /f %%a in ('dir %1 /s /ad /b') do (
- if "!num!"=="1" (
- set /a num+=1
- ) ELSE (
- copy %%a\*.* %1\ >nul
- set /a num+=1
- )
- )
- pause
复制代码
以上代码可以拷贝三级文件夹内所有文件至一级文件夹内,但是没有考虑三级文件夹内如果还有四级文件夹的情况,所以请酌情使用,或者提供完整信息!
使用时,将一级文件夹拖到批处理文件图标上即可!
作者: 77七 时间: 2024-1-30 13:30
- @echo off
- cd /d "%~dp0"
- for /d %%d in (*) do (
- for /d %%e in ("%%d\*") do (
- for /d %%f in ("%%e\*") do (
- move /-y "%%f\*" "%%d\" 2>nul
- )
- )
- )
- pause
复制代码
作者: hfxiang 时间: 2024-1-30 13:53
回复 1# 脑袋大
将如下代码保存为moveFiles.bat,假设一级文件夹为"D:\data\1",则在命令行窗口执行:moveFiles.bat "D:\data\1" 2- @echo off
- setlocal
- cd /d "%~1"
- set "pt=%cd%"
- set currentLevel=0
- set depth=%2
- if not defined depth set depth=1
- set /a Out_ID=depth-1
- :procFolder
- pushd %1 2>nul || exit /b
- if %currentLevel% lss %depth% (
- for /d %%F in (*) do (
- if %currentLevel% equ %Out_ID% (
- pushd "%%~fF"
- for /f "tokens=*" %%a in ('dir /b /a-d') do move "%%~fa" "%pt%\"
- popd
- )
- set /a currentLevel+=1
- call :procFolder "%%F"
- set /a currentLevel-=1
- )
- )
- popd
复制代码
作者: ppll2030 时间: 2024-1-30 14:09
本帖最后由 ppll2030 于 2024-1-30 14:10 编辑
根据要求。只针对第三级文件夹下的文件,其下子文件夹都不涉及。
代码保存bat文件,与一级目录并排,使用拖拽方式运行。- @echo off
- set folder=%~1
- pushd "%~1"
- REM 创建一级目录下临时文件夹用于存放移动上来的文件,不需要可删除。同时删除第10行移动目标路径的 "temp\"
- md temp
- for /f %%D in ('dir /b /ad') do (
- pushd %%D
- for /f %%E in ('dir /b /ad') do (
- REM 请预览无误再去除echo执行转移,也可改用xcopy先复制一份出来查看
- echo move "%%E\*.*" "%~1\temp\"
- )
- popd
- )
- PAUSE
复制代码
作者: buyiyang 时间: 2024-1-30 14:30
写两个不一样的,放一级文件夹- @echo off&cd /d "%~dp0"
- set /a dep=2
- setlocal enabledelayedexpansion
- for /r %%i in (*) do (
- set "f=%%i"
- for /f %%a in ('cmd /u/q/c set /p"=!f:%~dp0=!"^<nul^|find /v ""^|find /c "\"') do (
- if %%a equ %dep% move /y "%%i" "%~dp0"&&echo,%%i
- )
- )
- pause
复制代码
- @echo off&cd /d "%~dp0"
- setlocal enabledelayedexpansion
- for /r %%i in (*) do (
- set "f=%%i"&set "f=!f:%~dp0=!"
- for /f "tokens=3-4 delims=\" %%a in ("!f!") do (
- if "%%b"=="" move /y "%%i" "%~dp0"&&echo,%%i
- )
- )
- pause
复制代码
作者: 脑袋大 时间: 2024-1-30 15:49
不统一回复了!感谢大家的帮助,目的已经实现!谢谢大家
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |