Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.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
Date 上次修改的机器人镜头:比一天更准确?_Date_Batch File_Robocopy - Fatal编程技术网

Date 上次修改的机器人镜头:比一天更准确?

Date 上次修改的机器人镜头:比一天更准确?,date,batch-file,robocopy,Date,Batch File,Robocopy,我正在处理Windows批处理文件,以便与服务器进行双向同步。批处理文件将由多人使用,以将多台计算机与单个网络位置同步。由于限制我不会进入,它必须是一个批处理文件。没有vbscript,没有javascript,只有windows批处理。只要我可以在批处理文件中运行Powershell命令,它们就可以了 为了允许删除文件,它会运行robocopy多次。首先,它复制比上次使用/MAXLAD开关运行脚本时更新的文件。它在两个方向上都这样做。然后,它使用/l开关进行镜像,并检查退出代码以检测额外的文件

我正在处理Windows批处理文件,以便与服务器进行双向同步。批处理文件将由多人使用,以将多台计算机与单个网络位置同步。由于限制我不会进入,它必须是一个批处理文件。没有vbscript,没有javascript,只有windows批处理。只要我可以在批处理文件中运行Powershell命令,它们就可以了

为了允许删除文件,它会运行robocopy多次。首先,它复制比上次使用/MAXLAD开关运行脚本时更新的文件。它在两个方向上都这样做。然后,它使用/l开关进行镜像,并检查退出代码以检测额外的文件。如果任何一方都有额外的文件,它将以正确的方向运行镜像

脚本运行得很好,但是

问题是,/MAXLAD接受格式为YYYYMMDD的日期,因此如果您在本地创建一个文件,请运行同步脚本,然后立即删除该文件并再次同步,它将从坟墓中返回。要成功删除文件,需要在上次运行脚本之前至少一天未对其进行修改。我想用一些方法来消除这个限制,这样我的用户就可以随时运行它,并按预期工作


我的问题是:是否有更精确的方法来确定最后的访问时间?即使我能把时间缩短到一个小时,这也是一种进步。我是否应该做一些robocopy以外的事情来复制新文件?

使用
robocopy
AFAIK,不可能在一天内获得更精确的信息。
但是,使用另外两种方法可以获得更细粒度的颗粒

DIR /o:d /a:-d
将当前目录的文件从最新到最旧排序,并将所有目录从列表中删除。
要将列表从最旧更改为最新,请将
/o:d
更改为
/o:-d


另外,FOR语句可以做同样的事情

@ECHO OFF
setlocal ENABLEDELAYEDEXPANSION
set count=0
:: If some other process left %tmp%\temp.txt, delete it.
if exist %tmp%\temp.txt del %tmp%\temp.txt

for %%x in (*.*) do (
    set /a count=!count!+1
    :: Capture Size
    set size=000000%%~zx
    :: Capture Date and Time
    set td=%%~tx
    :: Turn Date into YYYY/MM/DD format
    set dd=!td:~6,4!/!td:~0,5!
    :: Set tt=hour of day
    set tt=!td:~11,2!
    :: Turn AM/PM time into 24 hour day time
    if !td:~-2!==PM set /a tt=!tt!+12
    :: Add :Minutes to time
    set tt=!tt!:!td:~-5,2!
    :: Append Size Date Time FileName to temp.txt
    call echo !size:~-5! !dd! !tt! %%x>>%tmp%\temp.txt
rem    :: Create variable size[n] and set it to: Size Date Time FileName
rem    call set size[!count!]=!size:~-5! !dd! !tt! %%x
)

echo.
echo Size  Date       Time  FileName
echo ===== ========== ===== ===============

::
:: Alternate 1: Replacing the Append line to `temp.
:: :: Print Array into %tmp%\temp.txt
:: for /l %%x in (1 1 %count%) do (
::  :: Pipe variable into a file
::  echo !size[%%x]!>>%tmp%\temp.txt
:: )

::
:: Alternate 2: Another way to iterate through the array size[n]
:: :loop
::   set /a ctr=%ctr%+1
::   echo !size[%ctr%]!
:: if %ctr% lss %count% goto loop

::
:: Sort temp.txt, starting at the 6th character (the date).
type %tmp%\temp.txt | sort.exe /+6
del %tmp%\temp.txt
echo.
上面的代码并不像看上去那么长和复杂。它的大部分内容都是简单的注释,几乎一半都是代码。其余大部分都是冗余代码,只是为了显示