我是一个初学者,我需要一些帮助,用服务器上的文件备份一些文件夹。
我需要将一些文件夹复制到本地计算机。
要复制的文件夹是这样的
\\DistantServer\path\RandomFolder\Config\old
\\DistantServer\path\Another Random Folder\Config\old
...
应将这些旧文件夹复制到:
D:\Backup\RandomFolder\old
D:\Backup\Another Random Folder\old
我尝试了一些代码,但我只是有错误。
有人可以帮助我吗?
答案 0 :(得分:0)
此批处理文件应该适用于该任务:
@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 命令。
%%~nxI
引用源文件夹中没有路径的当前子文件夹,即没有使用环境变量SourceFolder
定义的文件夹路径。
命令 XCOPY 将源文件夹的当前子文件夹中的整个文件夹Config\old
复制到环境变量old
定义的目标文件夹中的子文件夹TargetFolder
。如果目标规范尚未存在,则由 XCOPY 自动创建适当目标文件夹的整个目录结构,因为目标规范的结尾是反斜杠,表明目标字符串指定的 XCOPY 目录。
注意:上面没有命令 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
要了解使用的命令及其工作原理,请打开命令提示符窗口,执行以下命令,并完全阅读为每个命令显示的所有帮助页面。
echo /?
endlocal /?
for /?
if /?
rd /?
set /?
setlocal /?
xcopy /?
另请阅读Microsoft有关Using Command Redirection Operators的文章,了解>nul
和2>nul
的说明。并阅读Single line with multiple commands using Windows batch file上的答案,了解最后一批代码中使用的运算符&
的解释(带有 RD 的单一命令行)。