动态命名FOLDER以进行备份

时间:2016-01-01 11:19:29

标签: batch-file dynamic

我想知道如何使用批处理文件将文件从一个目录复制到另一个目录,然后使用动态名称命名,该名称使用备份日期作为名称。 我知道如何使用xcopy将文件复制到新的DIR(这与我复制的文件的大小有点慢),但我无法弄清楚如何命名它们被动态复制到的文件夹。 [如果有人有更快的解决方案,我会听到它]

我一直试图解决这个问题,我之前已经问过这个问题了,我已经尝试过广泛研究,但我很难理解它是如何工作的。

2 个答案:

答案 0 :(得分:0)

运行此批处理代码,您可以看到如何将当前日期分配给环境变量class DispatchState extends Model { use EventGenerator; // Define Table Setup with fillabe fields protected $table = 'dispatch_states'; // Fillable fields in database protected $fillable = ['state']; // include timestamps public $timestamps = true; // Status __belongs_to_many__ Dispatches public function dispatches() { return $this->belongsToMany('App\Classes\Dispatch'); } } ,以便在备份文件夹的名称中使用。

FolderDate

阅读Find out if file is older than 4 hours in Batch file上的答案和Batch file to delete files older than N days上的答案,了解有关获取和重新格式化日期和时间字符串的详细信息。

使用环境变量值 DATE 重新格式化文件夹名称以格式@echo off rem Get the current local date and time in a region and language rem independent format by using Windows Management Instrumentation. for /F "skip=1 delims=." %%T in ('%SystemRoot%\System32\wbem\wmic.exe OS get localdatetime') do set "LocalDateTime=%%T" & goto ReformatDate rem Convert the date and time string in format yyyymmddhhmmss like rem 20151231150357 to a readable format with date only like 2015-12-31. :ReformatDate set "FolderDate=%LocalDateTime:~0,4%-%LocalDateTime:~4,2%-%LocalDateTime:~6,2%" rem Output the date string for the backup folder and delete the 2 variables. echo Date for backup folder is: %FolderDate% echo. set "LocalDateTime=" set "FolderDate=" pause 将比使用yyyy-mm-dd快得多。但是,使用 DATE 需要了解使用过的计算机上的日期格式,因为它取决于区域和语言设置。

要了解使用的命令及其工作原理,请打开命令提示符窗口,执行以下命令,并完全阅读为每个命令显示的所有帮助页面。

  • wmic
  • echo /?
  • for /?
  • pause /?
  • rem /?
  • set /?

建议在命令行窗口中运行wmic /?,以查看命令处理的命令行的输出,最后生成格式为{的日期字符串{1}}用于备份文件夹名称。

答案 1 :(得分:0)

我最终使用了这个:

@echo off

REM Find Current Year
set varYear=%date:~-4,4%

REM Find Current Month
set varMonth=%date:~-7,2%

REM Find Current Day
set varDay=%date:~-10,2%

REM Find Hour
set varHour=%time:~-11,2%

if %varHour% leq 9 (
call :trim %varHour%
goto :eof
:trim
set varHour=0%*
)
:eof

REM Find Minutes
set varMinutes=%time:~-8,2%

REM Compile Date
set DateTime=%varDay%.%varMonth%.%varYear%__%varHour%.%varMinutes%


mkdir "C:\New\Backup\Folder\%DateTime%_Backup"


xcopy /i "C:\Remote\Server" "C:\New\Backup\Folder\%DateTime%_Backup" /D/S/H/V/C/F/K/Y

exit

我最终不必使用FOR命令。我似乎无法理解它是如何工作的