Batch file 动态命名要备份的文件夹
我想知道如何使用批处理文件将文件从一个目录复制到另一个目录,然后使用使用备份日期作为名称的动态名称对其命名。 我知道如何使用xcopy将文件复制到新目录中(对于我复制的文件的大小来说,这有点慢),但我不知道如何动态命名它们被复制到的文件夹。[如果有人有更快的解决方案,我会听到]Batch file 动态命名要备份的文件夹,batch-file,dynamic,Batch File,Dynamic,我想知道如何使用批处理文件将文件从一个目录复制到另一个目录,然后使用使用备份日期作为名称的动态名称对其命名。 我知道如何使用xcopy将文件复制到新目录中(对于我复制的文件的大小来说,这有点慢),但我不知道如何动态命名它们被复制到的文件夹。[如果有人有更快的解决方案,我会听到] 我一直在试图弄明白这一点,我知道以前有人问过这个问题,我也尝试过对它进行广泛的研究,但我很难理解它是如何工作的 运行此批处理代码,您可以看到如何将当前日期分配给环境变量FolderDate,以便在备份文件夹的名称中使用
我一直在试图弄明白这一点,我知道以前有人问过这个问题,我也尝试过对它进行广泛的研究,但我很难理解它是如何工作的 运行此批处理代码,您可以看到如何将当前日期分配给环境变量
FolderDate
,以便在备份文件夹的名称中使用
@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
有关获取和重新设置日期和时间字符串格式的详细信息,请阅读例如上的答案和上的答案
使用环境变量DATE的值将文件夹名称重新格式化为yyyy-mm-dd
格式,比使用wmic
要快得多。但是使用日期需要了解所用机器上的日期格式,因为这取决于区域和语言设置
要了解所使用的命令及其工作方式,请打开命令提示符窗口,在其中执行以下命令,并非常仔细地阅读为每个命令显示的所有帮助页面
echo/?
获取/?
暂停/?
rem/?
设置/?
wmic/?
还建议在命令行窗口中运行
wmic OS get localdatetime
,以查看该命令行的输出被for命令处理,并最终生成格式为yyyy-mm-dd
的日期字符串,以便在备份文件夹的名称中使用。我最后使用了以下命令:
@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
@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命令。我似乎不明白它是如何工作的谢谢你。我知道这是怎么回事,但是FOR命令对于我所需要的是不必要的。我非常感谢你的帮助though@DakotaZinn要获得wmic的输出,需要上面的in-answer命令,该输出通常被写入FOR捕获的控制台窗口,并且在分配给环境变量的第一个句点
LocalDateTime
时已被截断。正如我所建议的,您不需要在批处理代码中使用,因为您直接使用依赖于区域的环境变量DATE和TIME。我无法提供一个使用日期和时间的解决方案,因为您没有在计算机上对这两个变量的字符串的格式提出疑问。