返回列表 发帖

[文件操作] 求助批处理批量解决移动指定类型文件到上一级目录中

本帖最后由 mmm8422616 于 2024-4-10 11:00 编辑

多层级目录 最后一级目录下面有 .symlink .jgp .nfo 等等类型的文件 比如  D:\...\...\...\...\...\AAA\

求助批处理批量解决移动指定类型(比如.symlink)文件到上一级目录中,然后删除AAA下面的其他所有类型的其他文件(直接删除AAA文件夹及下面的文件)

哪位大大帮忙给实现一下啊 谢谢哦!

@echo off
cd /d "%~dp0"
set str=symlink
for /f "delims=" %%d in ('dir /b /s /ad ^|sort /r') do (
move "%%d\*.%str%" "%%d\.."
del /q "%%d\*"
rd "%%d"
pause
exit
)COPY
bat小白,请多指教!谢谢!

TOP

回复 2# 77七

刚刚试了下 好像不对啊 把最后一级目录下的symlink移动了二级目录里面 然后其他类似的文件夹下的没有动

TOP

回复 3# mmm8422616


V1.bat
@echo off
cd /d "%~dp0"
set "ExtList=symlink jgp nfo"
for %%i in (%ExtList%) do (
    call :ExecRelocate %%i
)
goto :eof
:ExecRelocate
for /f "delims=" %%d in ('dir /b /s /ad ^|sort /r') do (
    move "%%d\*.%1" "%%d\.."
    del /q "%%d\*"
    rd "%%d"
    pause
    exit /b
)COPY
测试代码之前请做好备份

TOP

回复 3# mmm8422616


V2.bat
@echo off
cd /d "%~dp0"
set "ExtList=symlink jgp nfo"
for /f "delims=" %%d in ('dir /b /s /ad ^|sort /r') do (
    for %%i in (%ExtList%) do (
        move "%%d\*.%%i" "%%d\.."
    )
    del /q "%%d\*"
    rd "%%d"
    pause
    exit /b
)COPY
测试代码之前请做好备份

TOP

回复 3# mmm8422616


  
@echo off
cd /d "%~dp0"
set str=symlink
for /f "delims=" %%d in ('dir /b /s /ad') do (
dir /b /ad "%%d" |findstr . 1>nul || set _"%%d"=1
)
for /f "delims=" %%d in ('dir /b /s /ad') do (
if defined _"%%d" (
if exist "%%d\*.%str%" (
move "%%d\*.%str%" "%%d\.."
del /q "%%d\*"
rd "%%d"
)
)
)
pauseCOPY
bat小白,请多指教!谢谢!

TOP

批处理批量解决移动指定类型文件到上一级目录中【已解决】

回复 6# 77七

感谢兄弟 已经测试完美解决我的问题 棒棒哒!

TOP

本帖最后由 qixiaobin0715 于 2024-4-11 08:48 编辑

findstr有时是好用,但总觉得尽量少用为好,findstr属于外部命令,调用时其效率要差些,特别是在循环体内调用且又使用了管道命令效率更差些。
@echo off
for /f "delims=" %%i in ('dir /s /b /ad') do (
    if exist "%%i\*.symlink" (
        set n=
        for /f "delims=" %%j in ('dir /b /ad "%%i"') do set n=true
        if not defined n (
            move "%%i\*.symlink" "%%i\.."
            rd /s /q "%%i"
        )
    )
)
pauseCOPY
以上代码未经测试,可能会有问题,但大体思路应当是这样。运行代码前请备份好源文件,以免出现意外。
1

评分人数

    • 77七: 感谢分享技术 + 1

TOP

回复 8# qixiaobin0715


    已经测试,没有问题,非常感谢大大们的帮助!!!

TOP

回复 1# mmm8422616

一楼题意是指“最后一级目录(不再含子目录)”,如是则代码也许可进一步简化...
以下代码假设最后一级目录为 d:\a\aa\aaa
@echo off &set "_cd=d:\a\aa\aaa"
cd /d "%_cd%" &(for %%F in ( "symlink" "jpg" "nfo" ) do move /y "*.%%~F" "..") 2>nul
cd ".." & rd /s/q "%_cd%" &pause &exit/bCOPY

TOP

回复  mmm8422616
77七 发表于 2024-4-10 16:32



    实际使用过程中发现了点小问题,麻烦大大给修改一下,比如目录下面有这几种类型的文件 .symlink .mp4 .mkv .nfo .jpg 等等的,我需要把.symlink .mp4 .mkv这几种类型的文件进行移动,然后再删除目录下的其他文件、再删除此文件夹。

现在的情况是,我移动了symlink类型的文件后,也删除了我想移动的mp4 mkv类型的文件了 当时没有考虑文件夹下有不同的影视文件类型。

麻烦大大给修改一下啊!

TOP

回复 10# aloha20200628


    这个好像不符合我的要求 你直接定义到了一个目录下了 实际上有很多大量这样类似的目录结构 需要批量进行

TOP

回复 11# mmm8422616


@echo off
cd /d "%~dp0"
set str=symlink mp4 mkv
for /f "delims=" %%d in ('dir /b /s /ad') do (
dir /b /ad "%%d" |findstr . 1>nul || set _"%%d"=1
)
for /f "delims=" %%d in ('dir /b /s /ad') do (
if defined _"%%d" (
for %%x in (%str%) do (
if exist "%%d\*.%%x" (
move "%%d\*.%%x" "%%d\.."
set _"%%d"=
)
)
if not defined _"%%d" (
del /q "%%d\*"
rd "%%d"
)
)
)
pauseCOPY
bat小白,请多指教!谢谢!

TOP

本帖最后由 qixiaobin0715 于 2024-4-11 16:58 编辑
@echo off
for /f "delims=" %%i in ('dir /s /b /ad') do (
    set n=
    for /f "delims=" %%j in ('dir /b /ad "%%i"') do set n=true
    if not defined n (
        set m=
        for /f "delims=" %%k in ('dir /b /a-d *.symlink *.mp4 *.mkv') do (
            set m=true
            move "%%i\%%k" "%%i\.."
        )
        if defined m rd /s /q "%%i"
    )
)
pauseCOPY

TOP

本帖最后由 aloha20200628 于 2024-4-11 18:37 编辑

回复 12# mmm8422616
处理(删除)“多个” 末级目录和处理(删除)“每个” 末级目录可不是一回事

TOP

返回列表