Сбой wmic с одновременными вызовами на XP и Server 2003

Я использую wmic чтобы получить время. Я сузил это до одной (1) строки.bat файла. Я узнал от stackru о том, как нужно передавать stdin и stdout, чтобы избежать зависаний.

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

Кажется, что если я запустил wmic одновременно, то это иногда не получится. Если я создаю две оболочки cmd и запускаю следующую команду в каждой, появляются ошибки, подобные приведенной ниже.

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% переменные отформатированы по выбору пользователя, поэтому я не могу это использовать. Какие-либо предложения?

2 ответа

Решение

Я никогда не слышал о проблеме, о которой вы сообщаете.

Вы можете попробовать getTimeStamp.bat - гибридную утилиту JScript/batch, которая обеспечивает надежные, независимые от локали, вычисления и форматирование даты и времени. Утилита представляет собой чистый скрипт, использующий встроенную функциональность Windows.

Предполагая, что у вас есть getTimeStamp.bat в вашем текущем каталоге, или, что еще лучше, где-то в вашем пути, тогда следующее создаст переменную с именем currentTimeStamp, содержащую текущую дату и время в формате WMIC.

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

Существует множество форматов, а также возможность применять сдвиги даты и времени и т. Д. Полная документация встроена в скрипт.

Это работает, нет необходимости для типа нуль трубы.

wmic os get localdatetime | findstr .
Другие вопросы по тегам