将文件版本与批处理脚本进行比较
Posted
技术标签:
【中文标题】将文件版本与批处理脚本进行比较【英文标题】:Compare File Versions With Batch Script 【发布时间】:2014-04-17 19:58:40 【问题描述】:我创建了一个 Access 数据库以供整个部门共享,我将其分为前端和后端。不幸的是,当我添加请求的更新时,我无法找到简单的方法来确保所有用户始终在其本地计算机上使用最新版本的前端。
为了克服这个问题,我创建了一个安装批处理脚本,该脚本会在他们的桌面上创建一个快捷方式。以及在其 PC 上的自定义文件夹中嵌套前端和“更新”批处理脚本。该快捷方式实际上链接到“更新”批处理脚本,然后下载最新版本的前端(覆盖现有的),然后加载它。
理想情况下,这不会每次都下载它,而是仅在网络上的前端版本大于本地机器上的版本时才下载它。不幸的是,我似乎无法弄清楚如何使用 accdb 文件执行此操作(尽管我已经看到了有关可执行文件的信息)。我们正在使用 Access 2010 和 Access 2007 文件类型。我还没有想出如何将版本号附加到前端,但我愿意包含一个文本文件以及简单地存储该版本号。有什么建议吗?
以下是我目前用于更新文件的脚本。
@ECHO OFF
CLS
XCOPY "\\NetworkPath\Install\*.accdb" c:\Reserved\Database /y /q
XCOPY "\\NetworkPath\Install\Update.bat" c:\Reserved\Database /y /q
CLS
ECHO Starting database...
START "" "C:\Reserved\Database\FrontEnd.accdb"
【问题讨论】:
这听起来与我们为几个共享访问数据库实现的非常相似。但是,我相信我们的脚本每次都会重新复制它,因为我们的用户倾向于让数据库长时间保持打开状态。如果我要实现这一点,我可能会支持文本文件的想法,因为即使只是打开共享的 .accdb 来检查“版本表”也有可能导致问题。 我总是在前端有一个单行表,在后端有一个单行表。在该表中是区域代码默认值等内容。当然还有版本号。因此,您首先启动该应用程序,如果版本号不匹配,则您可以使用批处理文件并退出 Access。因此,bat 文件复制到前端并重新启动它。 bat 文件中的“ok”提示往往会给出“更多”,然后有足够的时间让前端退出/关闭。这种方法意味着您启动 Access 而不是要更新/复制的 bat 文件或脚本。 不错的主意。因此,您基本上在 vba 中编写一个宏或脚本以在数据库启动时运行,比较版本号并启动批处理脚本(可能有超时)并关闭更新并重新启动访问? 为什么不在本地前端表中放一个版本号,然后在后端有一个版本号。设置快捷方式以启动主应用程序 (FE)。在您的启动代码中检查版本号,如果未匹配,则退出您的启动脚本并退出前端。批处理文件的第一行应该有一个提示“即将更新”,这将为 FE 留出时间关闭 + 退出。事实上,我建议使用 VBS 脚本,因为它具有 msgbox 功能。 【参考方案1】:我也做了同样的事情,通过使用xcopy
命令和/d
开关,解决了只有在前端发生变化时才重新下载前端的问题:
xcopy /yqd \\network\frontend.accdb frontend.accdb
Xcopy 参考:http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/xcopy.mspx?mfr=true
这可行,但在逻辑上留下了一个小缺口:当有人使用他们的本地前端副本时,你将新版本推送到网络,然后他们退出前端并再次运行脚本:它不会下载新版本,因为用户的本地副本将有稍后的修改时间。
为了克服这个问题,我实际上制作了本地前端的副本并从脚本启动 that,而不是启动下载的副本。这样,下载的副本将保留其原始修改时间,并且xcopy
的时间检查工作正常。您必须训练您的用户忽略 accdb
文件的本地副本并仅使用脚本。
【讨论】:
这是一个有趣的概念。虽然如果我要做这样的事情,我想我使用单独的文本文件会更容易(甚至可能删除 .txt 扩展名),因为它可以最大限度地减少空间并减少每个复制文件的需要时间。我将使用更新文件中的代码编辑原始帖子。 @LarrySteeze - 实际上,如果您使用的是xcopy
/d
开关,则不能使用单独的文本文件。你需要使用我上面给出的方法。原因是/d
开关不允许您指定诸如“如果源文本文件比目标文本文件更新,则复制源accdb
文件”之类的内容。无论如何,我认为拥有两个前端副本没什么大不了的——它们并没有那么大,任何运行 Access 的计算机都不会缺少空间。
你是对的。我无法使用 /d 开关来做到这一点。但是,有人确实在 cmets 中给了我一个关于使用表格来做的原始问题的好主意。
@LarrySteeze - 很酷,我很想知道这是否有效。如果是这样,您可能可以自己在这里发布它作为答案!以上是关于将文件版本与批处理脚本进行比较的主要内容,如果未能解决你的问题,请参考以下文章