标题: [文件操作] 【已解决】批处理如何将指定子文件夹中的内容移动到上一级 [打印本页]
作者: lw121 时间: 2020-8-19 19:02 标题: 【已解决】批处理如何将指定子文件夹中的内容移动到上一级
本帖最后由 lw121 于 2020-8-21 22:51 编辑
c:\a\b\c2\111.png
c:\a\b2\c1\222.png
c:\a\b3\c\dd\444.png
c:\a\b4\c\dd\555.png
c:\a\b5\c3\ee\666.png
如何将子文件夹dd中的文件移动到上一级,并删除dd文件夹,其他的不变化
c:\a\b\c2\111.png
c:\a\b2\c1\222.png
c:\a\b3\c\444.png
c:\a\b4\c\555.png
c:\a\b5\c3\ee\666.png
作者: gzaapy 时间: 2020-8-20 08:15
move -y c:\a\b3\c\dd\444.png c:\a\b3\c\
move -y c:\a\b4\c\dd\555.png c:\a\b4\c\
rd /s /q c:\a\b3\c\dd
rd /s /q c:\a\b4\c\dd
作者: lw121 时间: 2020-8-20 09:38
回复 2# gzaapy
很多文件,并不是只有四条......
作者: qixiaobin0715 时间: 2020-8-20 10:50
回复 3# lw121
请参考http://www.bathome.net/thread-56542-1-1.html
作者: lw121 时间: 2020-8-20 15:23
回复 4# qixiaobin0715
我只需要移动指定子目录文件,其他同级的不变化
作者: qixiaobin0715 时间: 2020-8-20 15:33
回复 5# lw121
我的意思也是参考,自己改一下- @echo off
- echo 当前目录为0级目录,下面子目录分别为1、2、3、...级目录。
- setlocal enabledelayedexpansion
- set /p "src=请输入要移动的目录层级数:"
- set /p "desc=请输入要移动到的目录层级数:"
- echo -----------------------
- set /a "up=%src%-%desc%"
- set /a "src=%src%-1"
- for /r %%i in (*) do (
- cd /d "%%~dpi"
- for /l %%a in (0,1,%src%) do cd..
- if "!cd!\"=="%~dp0" (
- echo 移动 %%i
- cd /d "%%~dpi"
- for /l %%a in (1,1,%up%) do cd..
- echo 移到 !cd!
- move /y "%%i" "!cd!" >nul && echo 成功 || echo 失败
- echo -------------------
- )
- )
- pause&exit
复制代码
作者: qixiaobin0715 时间: 2020-8-20 16:47
本帖最后由 qixiaobin0715 于 2020-8-20 16:48 编辑
理解有误,把下面代码放到C:\a中运行- @echo off
- for /d /r %%i in (dd) do (
- for %%a in ("%%i\*") do (
- move /-y "%%a" "%%~dpa./../"
- )
- )
- pause
复制代码
作者: WHY 时间: 2020-8-20 19:58
- @echo off
- REM 待删除的文件夹名
- set "folderName=qq"
- for /f "delims=" %%i in ('dir /b /ad /s "%folderName%"') do (
- move "%%i\*" "%%i\..\"
- rd "%%i"
- )
- pause
复制代码
- @echo off
- REM 待删除的文件夹名
- set "folderName=qq"
- for /d /r %%i in ("%folderName%?") do (
- if /i "%%~nxi" == "%folderName%" (
- move "%%i\*" "%%i\..\"
- rd "%%i"
- )
- )
- pause
复制代码
作者: qixiaobin0715 时间: 2020-8-20 21:30
回复 8# WHY
请教两个问题:
1.第二个代码第5行具体判断什么
2.如果指定文件夹有两个以上文件,是否会出现移动一个文件,就将文件夹删除的情况
作者: qixiaobin0715 时间: 2020-8-20 22:25
本帖最后由 qixiaobin0715 于 2020-8-20 22:28 编辑
第2个问题已了解
文件夹不为空,有删除确认对话
用两个for循环,rd放在文件夹循环内,文件循环外,是不是更合理一些
作者: WHY 时间: 2020-8-20 22:45
回复 9# qixiaobin0715
第 4 行加了通配符 “?”,可以匹配 qq、qq1、qq2等等,所以要用 if 判断一下。
如果不加通配符,相当于 for /d /r %%i in (*) do ... 的结果再叠加上qq
严格来说,第一个脚本最好也加上通配符。之所以没加,是假设 qq 文件夹不在当前目录下。
作者: qixiaobin0715 时间: 2020-8-21 10:07
回复 11# WHY
谢谢解答!!!忘记/r的特性了。这样应当也可以:- @echo off
- for /d /r %%i in (dd) do (
- if exist %%i (
- move "%%i\*.*" "%%i\..\"
- rd "%%i"
- )
- )
- pause
复制代码
作者: lw121 时间: 2020-8-21 22:51
回复 8# WHY
谢谢
作者: WHY 时间: 2020-8-24 16:20
本帖最后由 WHY 于 2020-8-24 16:23 编辑
回复 12# qixiaobin0715
这样是可以的。
假设有 100 个文件夹,其中有 2 个文件夹名称分别为 dd、dd1,for 遍历 100 次所花的时间一定比 2 次的时间长,其效率一定比经过筛选后(2个文件)低。
作者: qixiaobin0715 时间: 2020-8-24 16:48
好像是这样的。如上所说,遍历100次都要进行,我的代码每次循环都要判断一次,效率是要低些。
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |