如何将文件从子文件夹传输到两级文件夹,同时将文件保留在主文件夹中并删除子文件夹?

时间:2019-05-07 13:14:16

标签: batch-file directory subdirectory bulkupdate

我需要一个批处理文件才能从中移动文件

F:\123456\V000\Chaptered\File1
F:\123456\V000\Chaptered\File2
F:\123457\V000\Chaptered\File1
F:\123457\V000\Chaptered\File2

对此

F:\123456\File1
F:\123456\File2
F:\123457\File1
F:\123457\File2

同时删除文件夹V000Chaptered,但不删除任何文件。

我试图以几种不同的方式制作批处理文件,但无法使其正常工作。

@echo off & setlocal enabledelayedexpansion
for /d /r %~"dp0" %%a in (*) do (
    if /i "%%~nxa"=="FolderX" (
       set "folderpath=%%a"
       move /y "!folderpath!\*" "!folderpath!\.."
       rmdir "!folderpath!"
   )
)

我希望实现上面的文件结构,但无法进行任何更改。 (由于文件很重要,因此我要谨慎删除该文件。)

2 个答案:

答案 0 :(得分:1)

@echo off
setlocal
for /d /r "%~dp0" %%a in (*) do (
    if /i "%%~nxa"=="FolderX" (
       ECHO move /y "%%a\*" "%%a\..\.."
       ECHO rmdir "%%a"
   )
)

(未经测试)

理论-%%a将被依次分配每个子目录的名称。仅选择名为FolderX的叶子进行处理;该目录的内容将移至其祖父母。

echo应该报告必需的命令-这是一种安全装置,可确保在测试过程中完成调试之前不会造成损坏。

问题是,如果目标目录包含子目录,那么这些子目录也将被删除。

答案 1 :(得分:0)

好吧,如果目标文件始终处于同一目录层次结构级别,则建议不要在整个目录树中搜索文件,而只能在该级别中搜索文件,如下所示:

@echo off
rem // Enumerate the variating destination directories and check sub-directory tree for existence:
for /D %%I in ("F:\*") do if exist "%%~I\V000\Chaptered\" (
    rem // Move found files to the destination directories:
    move /Y "%%~I\V000\Chaptered\*.*" "%%~I\"
    rem // Remove the sub-directory tree:
    rmdir "%%~I\V000\Chaptered" "%%~I\V000"
)