如何使用批处理文件将特定子文件夹复制到备份文件夹中的新文件夹?

How to copy specific subfolders if existing to new folders in a backup folder using a batch file?

我完全是个初学者,我需要一些帮助来从服务器备份一些文件夹和文件。

我需要将一些文件夹复制到我的本地计算机。

要复制的文件夹是这样的

\DistantServer\path\RandomFolder\Config\old
\DistantServer\path\Another Random Folder\Config\old
...

应将那些旧文件夹复制到:

D:\Backup\RandomFolder\old
D:\Backup\Another Random Folder\old

我尝试了一些代码,但我只是遇到了错误。

谁能帮帮我?

这个批处理文件应该适用于任务:

@echo off
setlocal EnableExtensions DisableDelayedExpansion
set "SourceFolder=\DistantServer\path"
set "TargetFolder=D:\Backup"

for /D %%I in ("%SourceFolder%\*") do (
    if exist "%%I\Config\Old\" (
        rd /Q /S "%TargetFolder%\%%~nxI\old" 2>nul
        %SystemRoot%\System32\xcopy.exe "%%I\Config\Old" "%TargetFolder%\%%~nxI\old\" /C /E /H /I /K /Q /R /Y >nul
    )
)

endlocal

命令 FOR 在使用环境变量 SourceFolder 定义的源文件夹中搜索非隐藏子文件夹。找到的每个子文件夹都分配有不以反斜杠结尾的完整路径,并且从不用双引号引起来循环变量 I 引用 %%I.

命令IF 检查源文件夹的当前子文件夹中是否存在子文件夹Config\old。如果不包含子文件夹 Config\old.

,则忽略找到的子文件夹

在源文件夹的当前子文件夹中存在 Config\old 时,命令 RD 首先悄悄地删除所有子文件夹,适当的目标文件夹独立于其存在以确保接下来完成的复制会导致 1:1 文件夹复制。 RD 如果目标文件夹在复制完成之前很可能不存在,或者如果希望将目标文件夹的现有内容与源文件夹的当前内容合并,则可以删除 RD 命令。

%%~nxI 引用没有路径的源文件夹中的当前子文件夹,即没有使用环境变量 SourceFolder.

定义的文件夹路径

命令 XCOPY 将源文件夹当前子文件夹中的整个文件夹 Config\old 复制到目标文件夹中的子文件夹 old,如环境变量 TargetFolderXCOPY 会自动创建相应目标文件夹的整个目录结构(如果不存在,因为目标规范以反斜杠结尾,这是 XCOPY[=76= 的明确指示) ] 目标字符串指定目录。

注意:上面没有命令 RD 的整个代码也可以优化为单个命令行。

@for /D %%I in ("\DistantServer\path\*") do @if exist "%%I\Config\Old\" %SystemRoot%\System32\xcopy.exe "%%I\Config\Old" "D:\Backup\%%~nxI\old\" /C /E /H /I /K /Q /R /Y >nul

单命令行命令 RD:

@for /D %%I in ("\DistantServer\path\*") do @if exist "%%I\Config\Old\" rd /Q /S "D:\Backup\%%~nxI\old" 2>nul & %SystemRoot%\System32\xcopy.exe "%%I\Config\Old" "D:\Backup\%%~nxI\old\" /C /E /H /I /K /Q /R /Y >nul

要了解使用的命令及其工作原理,请打开命令提示符 window,在其中执行以下命令,并仔细阅读为每个命令显示的所有帮助页面。

  • echo /?
  • endlocal /?
  • for /?
  • if /?
  • rd /?
  • set /?
  • setlocal /?
  • xcopy /?

另请阅读有关 Using Command Redirection Operators for an explanation of >nul and 2>nul. And read answer on Single line with multiple commands using Windows batch file 的 Microsoft 文章,了解上一批代码中使用的运算符 & 的解释(带有 RD 的单个命令行) .