Пакетный файл для сравнения исполняемых версий на разных машинах - PullRequest
0 голосов
/ 24 февраля 2020

Я в группе, которая строит машины с использованием исходного компьютера и копирует определенные c программные пакеты на целевой компьютер. Это сделано для миграции обновления ОС. Машины собираются за пару месяцев до миграции, и иногда программное обеспечение в исходном коде обновляется без предварительного уведомления, что делает целевую машину устаревшей. Я пытаюсь создать инструмент для проверки исполняемых версий на исходном и целевом компьютерах и сравниваю их. Если исходный компьютер отличается от целевого компьютера, то я записываю в специальный файл ошибок, а также в файл, указанный машиной c. Причина этого заключается в том, что пользователь инструмента будет иметь только один файл для работы вместо сотен, а также хранить отдельные файлы машин.

Когда я запускаю пакетный файл с именем машины, жестко закодированным в циклах это прекрасно работает Ниже приведен пример этого:

if exist "\\MachineName\C$\!source!\Software\Software.exe" (
cls
echo Checking XXX 64 Bit for MachineName and MachineName2
echo.>>%FileVersions%\MachineName2_Versions.txt
For /F "Tokens=1* Delims==" %%A In (
    'WMIC /NODE:"MachineName" DataFile Where "Name='C:\\!source!\\Software\\Software.exe'" Get Version /Value 2^>Nul'
) Do For /F "Tokens=*" %%C In ("%%B") Do Set "val1=%%C"

For /F "Tokens=1* Delims==" %%A In (
    'WMIC /NODE:"MachineName2" DataFile Where "Name='C:\\!target!\\Software\\Software.exe'" Get Version /Value 2^>Nul'
) Do For /F "Tokens=*" %%C In ("%%B") Do Set "val2=%%C"

if %val1% == %val2% (
   echo "XXX 64 Bit %mydate%%mytime%">>%FileVersions%\MachineName2_Versions.txt
   echo MachineName XXX 64 Bit Version = %val1%>>%FileVersions%\%%h_Versions.txt
   echo MachineName2 XXX 64 Bit Version = %val2%>>>>%FileVersions%\MachineName2_Versions.txt
   echo.>>%FileVersions%\MachineName2_Versions.txt
   ) else (
      echo "XXX 64 Bit %mydate%%mytime%">>%AllFailures%\VersionFailures.txt
      echo MachineName XXX 64 Bit Version = %val1%>>%AllFailures%\VersionFailures.txt
      echo MachineName2 XXX 64 Bit Version = %val2%>>%AllFailures%\VersionFailures.txt
      echo.>>%FileVersions%\%AllFailures%\VersionFailures.txt
      echo MachineName XXX 64 Bit Version = %val1%>>%FileVersions%\%%h_Versions.txt
      echo MachineName2 XXX 64 Bit Version = %val2%>>>>%FileVersions%\MachineName2_Versions.txt
      echo.>>%FileVersions%\MachineName2_Versions.txt
   )
)

Когда я вкладываю этот l oop в другой для l oop для оценки нескольких машин, происходит сбой с «Синтаксис команды неверен». Я предполагаю, что ошибка касается строки кода WMI C. Я пробовал много способов использования кавычек (или не используя их), но все равно получаю ту же ошибку. Чего мне не хватает в этом? У кого-нибудь есть идеи, как заставить этот l oop работать на нескольких машинах?

for /f "Tokens=1,2,3 delims=," %%g in (%file%) do (
if exist "\\%%g\C$\!source!\Software\Software.exe" (
cls
echo XXX 64 Bit for %%g and %%h
echo.>>%FileVersions%\%%h_Versions.txt
For /F "Tokens=1* Delims==" %%A In (
    'WMIC /NODE:"%%g" DataFile Where "Name='C:\\!source!\\Software\\Software.exe'" Get Version /Value 2^>Nul'
) Do For /F "Tokens=*" %%C In ("%%B") Do Set "val1=%%C"

For /F "Tokens=1* Delims==" %%A In (
    'WMIC /NODE:"%%h" DataFile Where "Name='C:\\!target!\\Software\\Software.exe'" Get Version /Value 2^>Nul'
) Do For /F "Tokens=*" %%C In ("%%B") Do Set "val2=%%C"

if %val1% == %val2% (
   echo "XXX 64 Bit %mydate%%mytime%">>%FileVersions%\%%h_Versions.txt
   echo %%g XXX 64 Bit Version = %val1%>>%FileVersions%\%%h_Versions.txt
   echo %%h XXX 64 Bit Version = %val2%>>>>%FileVersions%\%%h_Versions.txt
   echo.>>%FileVersions%\%%h_Versions.txt
   ) else (
      echo "XXX 64 Bit %mydate%%mytime%">>%AllFailures%\VersionFailures.txt
      echo %%g XXX 64 Bit Version = %val1%>>%AllFailures%\VersionFailures.txt
      echo %%h XXX 64 Bit Version = %val2%>>%AllFailures%\VersionFailures.txt
      echo.>>%FileVersions%\%AllFailures%\VersionFailures.txt
      echo %%g XXX 64 Bit Version = %val1%>>%FileVersions%\%%h_Versions.txt
      echo %%h XXX 64 Bit Version = %val2%>>>>%FileVersions%\%%h_Versions.txt
      echo.>>%FileVersions%\%%h_Versions.txt
   )
)
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...