windows - 我如何编写一个脚本来比较修改日期并查看哪个更新?

标签 windows csv batch-file command-line

现在我找到了一些使用 java 和 python 的东西,但我想要一些使用 CMD 的东西,因为这是我们在任何 Win PC 上已经拥有的东西。我有一个从 XLS 文件创建的 CSV。 XLS 文件经常更新。我一直在尝试编写一个在登录时运行的脚本,该脚本检查 XLS 文件和 CSV 文件,如果 XLS 较新(最近修改过),它将运行一个 libreoffice 命令,将其输出为“;”分隔的 CSV。我当时做的是

FOR /F "TOKENS=1" %%A IN ('DIR /o:-d "\\path" ^| FIND "Part of filename"') DO SET "Chk1=%%A" 

这给了我一个例子,Chk1=1/3/2015。如果 Chk2=1/2/2015 而我做

IF "%Chk1%" GTR "%Chk2%" ECHO Hi

我得到一个嗨。问题是新年到了,如果 Chk2=12/30/2014,上面的相同代码没有给我“嗨”。我假设它完全忽略了年份,只看月份和日期。这给我的另一个问题是,由于它正在查看 365 的日期,如果我在同一日期内运行脚本,它将看不到更改。原因是“1/3/2015 10:24”被视为大于“1/3/2015 10:23”但小于“12/30/2014 06:14”。

我知道我也可以在 powershell 和其他平台上做到这一点,但正如我之前所说,我不介意在我的电脑上安装 Python,实际上拥有它,或者在我的电脑上启用运行 PS 脚本,但我想让其他人保持不变,但仍然有能力这样做。 CMD 是每个人都拥有的东西,无需进行任何安全更改即可运行批处理脚本。

最佳答案

set "source=c:\somewhere\file.xls"
set "target=c:\targets\file.csv"

xcopy /l /d /y "%source%" "%target%" | findstr /b /c:"1 " >nul && (
    echo "%target%" needs to be updated
)

这使用 xcopy 来仅获取将被复制的文件列表 (/l)(没有真正复制它们),尝试将源文件复制到target 但仅当需要更新目标文件时 (/d)。如果输出在行的开头包含文本 1 file(或类似的,抱歉,我的 Windows 副本是西类牙语),则源文件比目标文件新。

关于windows - 我如何编写一个脚本来比较修改日期并查看哪个更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27764818/

相关文章:

windows - 从临时文件夹运行签名和 RequireAdministrator 可执行文件?

windows - 如何在 Windows 8 中运行后台任务?

java - 使用 CSVParser/CSVStrategy 解析文件时如何检测 "disable"注释 (Apache Commons)

windows - 在 Windows 系统上快速创建大文件

batch-file - 为什么这个 .bat cmd 总是命中一个我不打算让它命中的子例程?

windows - ffmpeg - 使用 -filter_complex 对视频素材进行颜色分级并将原始源显示为画中画

python - 如何在纯python中的Windows上获取父 shell 的路径?

MySql 加载文件 STR_TO_DATE 中的数据返回空白?

php - 从 Excel 文件获取信息然后导入到 CSS

batch-file - 等待通过调用批处理文件创建的进程完成