用于复制单个文件夹的批处理文件 - 而不仅仅是内容

时间:2017-11-16 17:30:59

标签: batch-file

我正在努力创建一个可以在任何文件夹中使用的批处理文件,该文件夹会将当前文件夹及其所有内容复制到另一个位置。目的是允许我通过运行批处理文件来快速备份任何当前文件夹。批处理文件对我来说是新的,但编程不是。这是我的代码。

@echo off
title Copy This Directory
:: get current directory
 set startdir=%cd%
 echo.startdir = %startdir%
:: copy the test folder
 xcopy "%startdir%" "F:\Temp Backup\" /s /y
 pause

这会将源文件夹中的文件和文件夹复制到新目标,但我想将文件夹本身及其内容一起复制。即如果批处理文件位于名为" FromFolder"的文件夹中,我想要" FromFolder"在" F:\ Temp Backup \"中显示为文件夹及其所有内容在" F:\ Temp Backup \ FromFolder"。我发现了很多关于复制文件的信息,但没有关于复制单个目录的信息。我可以复制单个文件,但是当我使用相同的代码并将文件名更改为文件夹名时,它会复制文件夹的内容而不是文件夹本身。有人能让我知道我错过了什么。

3 个答案:

答案 0 :(得分:0)

@echo off

rem set destination dir
set destDir=C:\tmp\fizz bang

rem get the current dir
set currDir=%cd%

rem set current dir to parent
pushd ..

rem get the parent dir path
set parDir=%cd%

rem replace the parent path part of the dir with the destination
rem see also: https://stackoverflow.com/a/5821366
rem also note the trailing backslash to tell xcopy it's a directory
CALL set destPath=%%currDir:%parDir%=%destDir%%%\

rem copy
xcopy /e "%currDir%" "%destPath%"

rem go back where we started
popd

pause

答案 1 :(得分:0)

我决定在目的地创建一个新文件夹,然后将内容复制到该文件夹​​。这就是我的所作所为。

@setlocal enableextensions enabledelayedexpansion
@echo off
title Copy This Directory
:: get current directory
@echo off
set startdir=%cd%
set temp=%startdir%
set folder=
:loop
if not "x%temp:~-1%"=="x\" (
    set folder=!temp:~-1!!folder!
    set temp=!temp:~0,-1!
    goto :loop
)
echo.startdir = %startdir%
echo.folder   = %folder%
:: Create new folder if needed
md "F:\Temp Backup\%folder%"
:: copy the contents
xcopy "%startdir%\*.*" "F:\Temp Backup\%folder%\" /s /y
pause
endlocal && set folder=%folder%

答案 2 :(得分:0)

如果您要从要备份的目录运行批处理文件,您可以在少量代码行中完成此操作。

@echo off
title Copy This Directory
for %%G in (".") do set folder=%%~nxG
md "F:\Temp Backup\%folder%" 2>nul
xcopy "*.*" "F:\Temp Backup\%folder%\" /s /y