使用批处理脚本recursion复制文件而不使用Xcopy

我需要使用批处理(DOS)脚本recursion复制一组文件,保持原来的目录结构。 听起来很简单,对吧? 这是复杂的:

  1. xcopy在服务器上不可用我将使用批处理脚本。 因此,我必须使用复制命令。
  2. 一个彻底的互联网search这个主题只会导致使用xcopy或脚本的一些专门用途(这只是一个通用的复制/粘贴作业)。
  3. 我从90年代起就没有在DOS下写过。

我如何获得复制命令保存到一个新的目录与旧的相同的名称/位置?

Solutions Collecting From Web of "使用批处理脚本recursion复制文件而不使用Xcopy"

这是未经测试的。 该代码应该复制文件夹结构,但不复制文件。 如果测试看起来是正确的,则从copy命令中删除ECHO部分。 第一个参数是“sourceDir”,第二个参数是“targetDir”。

编辑 :小细节修复

 @echo off if not exist %2 md %2 set targetDir=%~F2 cd %1 call :processFolder goto :EOF :processFolder setlocal EnableDelayedExpansion rem For each folder in this level for /D %%a in (*) do ( rem Enter into it, process it and go back to original cd %%a set "targetDir=%targetDir%\%%a" if not exist "!targetDir!" md "!targetDir!" ECHO copy *.* "!targetDir!" call :processFolder cd .. ) 
 @echo off setlocal enableextensions disabledelayedexpansion set "exitCode=0" set "sourceDir=%~1" set "targetDir=%~2" if not defined sourceDir ( call :usage goto endProcess ) if not defined targetDir ( call :usage goto endProcess ) for %%f in ("%sourceDir%") do set "sourceDir=%%~ff" for %%f in ("%targetDir%") do set "targetDir=%%~ff" if not exist "%sourceDir%" ( call :error "Source directory does not exist" goto endProcess ) if /i "%sourceDir%"=="%targetDir%" ( call :error "Source and target are the same" goto endProcess ) ver > nul call :recursiveFileCopy "%sourceDir%" "%targetDir%" if errorlevel 1 set "exitCode=1" goto endProcess :recursiveFileCopy sourceDir targetDir setlocal set "sourceDir=%~f1" set "targetDir=%~f2" if not exist "%targetDir%\" md "%targetDir%" || call :error "Failed to create [%targetDir%]" if not errorlevel 1 ( dir /ad "%sourcedir%\*" >nul 2>nul && copy /y "%sourcedir%\*" "%targetdir%" pushd "%sourcedir%" for /d %%d in (*) do if not errorlevel 1 call :recursiveFileCopy "%%~fd" "%targetDir%\%%~nxd" popd ) endlocal goto :eof :usage echo( echo( Usage: %~n0 sourceDir targetDir echo( :error echo(%~1 set "exitCode=1" & cmd /d /q /c exit /b 1 goto :eof :endProcess endlocal & exit /b %exitCode%