我需要一个批处理文件才能从中移动文件
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
同时删除文件夹V000
和Chaptered
,但不删除任何文件。
我试图以几种不同的方式制作批处理文件,但无法使其正常工作。
@echo off & setlocal enabledelayedexpansion
for /d /r %~"dp0" %%a in (*) do (
if /i "%%~nxa"=="FolderX" (
set "folderpath=%%a"
move /y "!folderpath!\*" "!folderpath!\.."
rmdir "!folderpath!"
)
)
我希望实现上面的文件结构,但无法进行任何更改。 (由于文件很重要,因此我要谨慎删除该文件。)
答案 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"
)