XP 和服务器 2003 上的并发调用的 wmic 故障



我正在使用wmic来获取时间。我已将其缩小到一 (1) 行.bat文件。我从堆栈溢出中学到了管道标准和标准输出以避免挂起。

C:> type t.bat
TYPE NUL | wmic os get localdatetime | findstr .

似乎如果我同时运行 wmic,它偶尔会失败。如果我创建两个cmd shell并在每个cmd shell中运行以下命令,则会出现类似于下面的错误。

for /l %i in (0,1,100) do (call t.bat)

C:> TYPE NUL | wmic os get localdatetime  | findstr .
Win32 Error: The process cannot access the file because it is being used by another process.

这似乎不会发生在Vista,7等上。我只在Windows XP SP3和Windows Server 2003 SP2上看到过这种情况。

它所说的"文件"可能是TempWmicBatchFile.bat,但我不确定。我还没有看到这个文件出现在Windows Vista或Windows 7机器上。

有没有其他方法可以获取当前时间?%DATE%%TIME%变量的格式由用户选择的表示形式格式化,因此我无法使用它。有什么建议吗?

我从未听说过您报告的问题。

您可以尝试 getTimeStamp.bat - 一个混合 JScript/batch 实用程序,提供健壮的、独立于区域设置的日期和时间计算和格式设置。该实用程序是使用本机Windows功能的纯脚本。

假设您在当前目录中有 getTimeStamp.bat,或者更好的是,在您的路径中的某个位置,那么以下内容将创建一个名为 currentTimeStamp 的变量,其中包含 WMIC 格式的当前日期和时间。

call getTimeStamp -f {yyyy}{mm}{dd}{hh}{nn}{ss}.{fff}000{zzzz} -r currentTimeStamp

有许多可用的格式,以及应用日期和时间偏移量等的能力。 脚本中嵌入了完整的文档。

这有效,不需要 NUL 管道类型。

wmic os get localdatetime | findstr .

最新更新