批量移动/剪切文件夹及其内容到另一个文件夹

批量移动/剪切文件夹及其内容到另一个文件夹

我有这个批处理脚本,它允许我从文本文件复制文件夹及其内容,有人可以帮我调整它以便移动/剪切文件夹+内容而不是仅仅复制吗?

  set file_list=ready.txt
    set dest_folder=c:\small\final
    for /f "delims=" %%a in (%file_list%) do (
    xcopy /Y "%%a*" "%dest_folder%%%~pa"
    )

答案1

请注意:不能使用通配符move

(为了清楚起见,请做file_list-> dir_list。)

@echo off
Setlocal EnableDelayedExpansion
set dir_list=ready.txt
set dest_folder=c:\small\final\ok
mkdir %dest_folder%
for /f "delims=" %%a IN (%dir_list%) do (
   set dir=%%a
   if "!dir:~-1!"=="\" set dir=!dir:~0,-1!
   move "!dir!" "%dest_folder%\"
)

ready.txt对于以 结尾的目录,\\在 之前被删除move


编辑

由于您要将目录从一个驱动器移动到另一个驱动器,因此不能使用move。以下是使用 的解决方案robocopy

@echo off
Setlocal EnableDelayedExpansion
set dir_list=ready.txt
set dest_folder=d:\small\final\ok\
if "%dest_folder:~-1%"=="\" set dest_folder=%dest_folder:~0,-1%
for /f "delims=" %%a in (%dir_list%) do (
  set dir1=%%a
  if "!dir1:~-1!"=="\" set dir1=!dir1:~0,-1!
  for %%f in (!dir1!) do set dir2=%%~nxf
  robocopy "!dir1!" "%dest_folder%\!dir2!" /MOVE /E
)

请注意,robocopy只能复制和移动整个目录,而不能复制和移动单个文件。因此,您的目录ready.txt应仅由目录组成。尾部\已处理完毕,可以混合使用。

Robocopy需要新目录的完整目录名,这就是为什么我们需要 -line
for %%f(以获取源目录的最后一个目录部分)。所以它需要
robocopy c:\sub\meme d:\sub\meme。你不能这样做robocopy c:\sub\meme d:\sub

您可以通过在-fileecho之前(以及上例中的 之前)放置来测试该批处理文件。robocopy
move

相关内容