我正在尝试创建一个批处理文件来读取Microsoft Access .ldb锁定文件.锁定文件包含计算机名称和用户名列表.我想提取计算机名称,并最终针对外部命令运行它们.
批处理文件的格式是单行,其中(1)计算机名称(2)为NULL字符(Hex 00)(3)约20个空格(4)用户名(5)NULL字符(6)约20空间重复.
Notepad ++中的示例,(NUL)表示Hex 00:
COMPUTER0123(NUL) Admin(NUL) COMPUTER0507(NUL) Admin(NUL)
我已经尝试了几种方法FOR来读取文件,但无法通过第一个计算机名称.
setlocal EnableDelayedExpansion
set file=database.ldb
for /F %%a in ('type %file%') do (
echo %%a
)
对于大多数Access数据库,文件中的用户名是Admin.我已经能够用来FIND告诉我文件中出现了多少次"Admin"(加1).
for /f "delims=" %%n in ('find /c /v "Admin" %file%') do set "len=%%n"
set "len=!len:*:=!"
echo %len% (minus 1) computer names to process
<%file% (
for /l %%l in (1 1 !len!) do (
set "line="
set /p "line="
echo(!line!)
)
)
Run Code Online (Sandbox Code Playgroud)
迭代找到的行不起作用,可能是因为文件中只有一行(没有回车). …
我试图从 Access 对象中检索LastUpdated日期,有时它返回 DateCreated 值。
我看到查询MSysObjects 的结果相同:
SELECT MSysObjects.Name,
Switch([Type]=5,'Query',[Type]=-32768,'Form',[Type]=-32764,'Report',[Type]=-32766,'Macro',[Type]=-32761,'Module') AS ObjectType,
MSysObjects.DateUpdate
FROM MSysObjects
WHERE (((Left$([Name],1))<>'~') AND ((MSysObjects.Type) In (5,-32768,-32764,-32766,-32761)))
ORDER BY MSysObjects.DateUpdate DESC;
Run Code Online (Sandbox Code Playgroud)
或从立即窗口使用DAO:
? CurrentDb.Containers("Forms").Documents("frm_POC_Assignment_Override").LastUpdated
正确的日期显示在导航窗格中(如果您选择查看方式 | 详细信息)
并出现在对象属性对话框中:
我使用的是 Access 2016 Office 365,32 位。