我正在将许多文件夹/子目录从一个网络驱动器复制到另一个网络驱动器,但是,这些文件的名称未知,并且我只想复制名称匹配的文件夹的内容。
例如:srcdir 有文件夹 f1、f3、f4、f9,destdir 有文件夹 f3、f5 和 f9:由于文件夹 f3 和 f9 的名称匹配,因此在 srcdir 中找到的 f3 和 f9 的内容(文件和子目录)将被复制到 destdir 中的各自文件夹中。
我尝试过使用 xcopy,但它只复制文件,我也尝试过
robocopy C:\test1 C:\test2 /u /s
但这跳过了所有内容。
我该如何将源网络驱动器中文件夹的内容复制到目标驱动器中与其匹配的文件夹中?这是我目前拥有的代码:
@ECHO OFF
setlocal EnableDelayedExpansion
for /d %%i in ("C:\test1\*") do (
for /d %%j in ("C:\test2\*") do (
set srcdir="%%~nxi"
set destdir="%%~nxj"
if !srcdir! == !destdir! ( robocopy C:\test1 C:\test2 ) else (echo Notsame!)
echo %srcdir%
ping 130.11.160.2
)
)
答案1
强大的文件和文件夹复制功能。
默认情况下Robocopy
,仅当源和目标具有不同的时间戳或不同的文件大小时才会复制文件。
robocopy C:\test1 C:\test2 /u /s
将会提高ERROR : Invalid Parameter #3 : "/u"
。
您可以使用下一个代码片段
@ECHO OFF
SETLOCAL EnableExtensions
set "source=C:\test1"
set "target=C:\test2"
for /d %%i in ("%source%\*") do (
for /d %%j in ("%target%\*") do (
if "%%~nxi"=="%%~nxj" (
robocopy "%source%\%%~nxi" "%target%\%%~nxi" * /s /e
) else (
echo "%%~nxi" Notsame! "%%~nxj"
)
rem please do not apply load global network ping 130.11.160.2
timeout /T 10
)
)
但是,你根本不需要迭代目标文件夹(阅读IF——有条件地执行命令)并应用if exist
:
@ECHO OFF
SETLOCAL EnableExtensions
set "source=C:\test1"
set "target=C:\test2"
for /d %%i in ("%source%\*") do (
if exist "%target%\%%~nxi\*" (
robocopy "%source%\%%~nxi" "%target%\%%~nxi" * /s /e
) else (
echo "%%~nxi" Notsame!
)
rem please do not apply load global network ping 130.11.160.2
timeout /T 10
)
注意区别(测试文件和文件夹的存在):
rem test a folder existence
if exist "%target%\%%~nxi\*" (echo folder exists) else (echo no such folder)
rem test a folder OR file existence
if exist "%target%\%%~nxi" (echo file OR folder exists) else (echo no such file/folder)
rem test a file (NOT folder) existence would be a bit more complex
rem (off current question topic) do it yourself in case of such demand