将* .dat从不同目录复制到镜像目录

时间:2010-12-15 14:21:37

标签: batch-file dos

我有一个具有以下结构的目录:

C:\Directory1\
      sub1\
      sub2\
      sub3\
      somefilename.txt
      someotherfile.txt

在每个sub*\内部都有.dat个文件,我需要将这些文件复制到另一个目录,就像找到它们的目录名一样。因此,如果我找到C:\Directory1\sub2\file.dat,我会将其复制到C:\mirror\sub2\file.dat,依此类推。

我尝试了几种类似于

的组合
for /R %SRC_DIR% %%f in (*.dat) do copy "%%f" %BACKUP_DIR%\%%~nf%%~xf

(请注意这只是我正在玩的代码的示例,我知道它不起作用)

无论如何,在尝试了几天之后,我仍然不知道该怎么做。有任何帮助的机会吗? 代码表示赞赏。

谢谢!

2 个答案:

答案 0 :(得分:1)

这对我有用:

@echo off
setlocal EnableExtensions EnableDelayedExpansion

set SourceDir=c:\source\dir
set TargetDir=d:\target\path
set FileMask=*.cpp

for /r "%SourceDir%" %%F in (%FileMask%) do (
    call :ReplacePrefix target_path "%%~F" "%SourceDir%" "%TargetDir%"
    call :CopyFile "%%~F" "!target_path!"
)

endlocal
goto :EOF


:CopyFile %1=source_path %2=target_path
    mkdir %~dp2
    copy %1 %2
    goto :EOF


:ReplacePrefix %1=result_var_name %2=string %3=replace_what %4=replace_with
    rem a question mark is prepended to ensure matching only at the beginning of the string
    set rp_value=?%~2
    call :DoIt "set %1=%%rp_value:?%~3=%~4%%"
    goto :EOF


:DoIt %1=cmd
    %~1
    goto :EOF

请记住,如果路径包含不常见的字符(例如=和其他一些我现在不记得的话),它可能会中断。

答案 1 :(得分:0)

使用以下XCOPY命令:

   xcopy "c:\directory1\*.dat" "c:\mirror\" /s /v /c /y

如果您不想看到屏幕上显示的文件名,请在选项列表中添加“ / q ”。

' / s '将从子文件夹中复制文件。如果子文件夹尚不存在,则会创建它们。

' / v '强制验证。没有必要,但有这种安心是很好的。

' / c '强制XCOPY在遇到任何问题时继续使用其他文件 - 换句话说,只有'某些文件才会突然停止批处理文件'复制了您的文件。 XCOPY将复制所有可能的内容。

/ y ”会禁止提示覆盖现有文件。