我正在努力创建一个可以在任何文件夹中使用的批处理文件,该文件夹会将当前文件夹及其所有内容复制到另一个位置。目的是允许我通过运行批处理文件来快速备份任何当前文件夹。批处理文件对我来说是新的,但编程不是。这是我的代码。
@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"。我发现了很多关于复制文件的信息,但没有关于复制单个目录的信息。我可以复制单个文件,但是当我使用相同的代码并将文件名更改为文件夹名时,它会复制文件夹的内容而不是文件夹本身。有人能让我知道我错过了什么。
答案 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