Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 动态命名要备份的文件夹_Batch File_Dynamic - Fatal编程技术网

Batch file 动态命名要备份的文件夹

Batch file 动态命名要备份的文件夹,batch-file,dynamic,Batch File,Dynamic,我想知道如何使用批处理文件将文件从一个目录复制到另一个目录,然后使用使用备份日期作为名称的动态名称对其命名。 我知道如何使用xcopy将文件复制到新目录中(对于我复制的文件的大小来说,这有点慢),但我不知道如何动态命名它们被复制到的文件夹。[如果有人有更快的解决方案,我会听到] 我一直在试图弄明白这一点,我知道以前有人问过这个问题,我也尝试过对它进行广泛的研究,但我很难理解它是如何工作的 运行此批处理代码,您可以看到如何将当前日期分配给环境变量FolderDate,以便在备份文件夹的名称中使用

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


我一直在试图弄明白这一点,我知道以前有人问过这个问题,我也尝试过对它进行广泛的研究,但我很难理解它是如何工作的

运行此批处理代码,您可以看到如何将当前日期分配给环境变量
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。我无法提供一个使用日期和时间的解决方案,因为您没有在计算机上对这两个变量的字符串的格式提出疑问。