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_Cmd - Fatal编程技术网

Batch file 批处理文件到备份文件

Batch file 批处理文件到备份文件,batch-file,cmd,Batch File,Cmd,我有下面的脚本,可以在用户登录时备份文件。它保存在批处理文件中。复制文件时,它还会创建一个日志。现在我想编辑脚本,这样它也可以保存文件复制的日期和时间。。。请你帮忙,谢谢 @echo off REM copy documents xcopy "C:\Users\user1\Desktop\the folder\the file.xlsm" "C:\Users\user1\Desktop\the folder\Backup\" /c /r /d /y > "C:\Users\user1\De

我有下面的脚本,可以在用户登录时备份文件。它保存在批处理文件中。复制文件时,它还会创建一个日志。现在我想编辑脚本,这样它也可以保存文件复制的日期和时间。。。请你帮忙,谢谢

@echo off
REM copy documents
xcopy "C:\Users\user1\Desktop\the folder\the file.xlsm" "C:\Users\user1\Desktop\the folder\Backup\" /c /r /d /y > "C:\Users\user1\Desktop\the folder\Backup\xcopy.log"

delims
值取决于您的区域设置)

您可以使用以下代码片段以与区域设置无关的方式获取日期和时间:

for /f "skip=1" %%x in ('wmic OS GET LocalDateTime') do if not defined LocalDateTime set LocalDateTime=%%x
set MyDate=%LocalDateTime:~0,8%
set MyTime=%LocalDateTime:~8,6%
但是,这是本地时间,因此在一个DST边界上两次获得相同的小时数,这对于日志文件来说并不理想。我建议仅将UTC用于以下目的:

for /f %%x in ('wmic path win32_utctime get /format:list ^| findstr "="') do set %%x

这将设置您可以使用的变量
Day
DayofWeek
Hour
Minute
Month
quartery
Second
WeekInMonth
Year

此功能独立于区域日期/时间格式:

for /f "tokens=1" %%I in ('wmic os get localdatetime ^|find "20"') do set dt=%%I
REM dt format is now YYYYMMDDhhmmss
echo DateTimeString: %dt%
REM from here you can format Date/Time as you need it:
set dat=%dt:~4,2%-%dt:~2,2%-%dt:~0,4%
echo formatted DateTimeString: %dat%

set tim=%dt:~8,4%
echo Time unformatted without Date: %tim%
set tims=%dt:~8,2%:%dt:~10,2%:%dt:~12,2%
echo Time formatted: %tims%
注意:如果要将日期/时间写入文件名,最好的选择是YYYYMMDDhhmm格式,因为这样文件将按时间顺序排序

xcopy“源”“目标”>路径\xcopy-%dt%.log“

要将日期/时间写入文件,请使用


echo%dat%-%tims%>>“path\xcopy.log”

你知道,你可以用
%Date%
%Time%
来代替,但这仍然很可怕,因为所有这些都取决于区域设置。ο谢谢!为了避免对区域设置的依赖,我们可以使用:
date.exe+%Y%m%d-%H%m%S>>xcopy.log
(这对于这个问题的作者来说是正确的解决方案,但我不确定他是否可以使用外部utils)。请参阅我的答案,它只使用自Windows 2000以来Windows附带的东西。这里不需要使用外部实用程序。(就我个人而言,我尽量避免编写依赖于某些系统设置的批处理文件,因为特别是在这里,你永远不知道这些设置是什么,然后你会得到一条评论,说它不起作用。)伊利亚和乔伊,我真的很困惑。这是我第一次使用批处理文件。所以你能告诉我如何修改我的原始脚本以获得所需的输出。我使用的是办公电脑,所以我不能安装任何外部软件。Thanks@user3125707,您只需将任何解决方案复制并粘贴到.bat文件的末尾ho
命令您必须添加
>“C:\Users\user1\Desktop\the folder\Backup\xcopy.log”
(将当前日期和时间添加到日志文件中)在2099年后停止工作,但是;-)(或者至少只能间歇性地工作)@joey:好的,用
“2”
或者更好的方法:将“20”替换为“findstr”[0-9]“;-)你好,Stephan,我如何显示时间?谢谢Stephan,我们的解决方案帮助我获取当前日期和时间,但它不能解决我的问题,因为我需要复制fie的时间和日期。我的脚本只会复制之前修改过的文件。回答得好@Joey!我希望使用UTC时间,但我想在一位数之前加0。目前,这个月的数字是9,而不是09。有什么建议吗?通常的方法是
set Month=0%Month%
set Month=%Month:~-2%
for /f "tokens=1" %%I in ('wmic os get localdatetime ^|find "20"') do set dt=%%I
REM dt format is now YYYYMMDDhhmmss
echo DateTimeString: %dt%
REM from here you can format Date/Time as you need it:
set dat=%dt:~4,2%-%dt:~2,2%-%dt:~0,4%
echo formatted DateTimeString: %dat%

set tim=%dt:~8,4%
echo Time unformatted without Date: %tim%
set tims=%dt:~8,2%:%dt:~10,2%:%dt:~12,2%
echo Time formatted: %tims%