gpt4 book ai didi

date - Robocopy 最后修改 : more accurate than a day?

转载 作者:行者123 更新时间:2023-12-02 03:55:12 25 4
gpt4 key购买 nike

我正在使用 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.

上面的代码并不像看起来那么长和复杂。其中大部分只是注释,将近一半占用了代码。剩下的大部分都是冗余代码,展示只是为了展示

关于date - Robocopy 最后修改 : more accurate than a day?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12982511/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com