2015-08-20 7 views
0

У меня есть пакетный скрипт, который выполняет анализ системы Windows. Но чтобы собирать информацию обозревателя, я должен проверить, установлены ли браузеры. Путь всех браузеров зависит от архитектуры системы (Program Files или Program Files (x86)). Поэтому я также проверяю, является ли система 32-битной или 64-битной и сохраняет путь в переменной% program_files%. Но хотя у меня есть Google Chrome на моем компьютере, программа выводит сообщение об ошибке: «Chrome, похоже, не установлен». Ниже приведен код, описанный:Пакетный скрипт для проверки наличия каталогов

Setlocal EnabledDelayedExpansion 
Set RegQry=HKLM\Hardware\Description\System\CentralProcessor\0 
REG.exe Query %RegQry% > %usbpath%CheckOS.txt 
Find /i "x86" < %usbpath%CheckOS.txt > %usbpath%StringCheck.txt 

IF %ERRORLEVEL% == 0 (
    SET PROGRAM_FILES=%PROGRAMFILES% 
) ELSE (
     SET "PROGRAM_FILES= %PROGRAMFILES(x86)%" 
) 

ECHO Check Google Chrome installation 
IF NOT EXIST "!PROGRAM_FILES!\Google\Chrome\" GOTO SKIPG_CHROME 

ECHO Running Google ChromeCacheView 

:SKIPG_CHROME 
ECHO Google Chrome doesn't seem to be installed. ChromeCacheView skipped. 
+0

Не следует использовать строку 'IF NOT EXIST '! PROGRAM_FILES! \ ...' на самом деле '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''. –

+0

Я пробовал это, но он не работает из-за скобки пути Файлы программы (x86) – marym92

+0

Вам не хватает «%», 'SET» PROGRAM_FILES =% PROGRAMFILES (x86)% "' –

ответ

0

Гораздо лучше для вашей задачи, чтобы определить, возможно расположение Chrome будет получать путь приложения из App Paths ключа (ов) реестра.

Но вот простое решение партии, избегая все опечатки вы сделали:

@echo off 
goto GetProgFilesDir 

rem If the environment variable "ProgramFiles(x86)" exists with a non 
rem empty value, this batch file is running on Windows x64 with a 
rem separate standard program files directory for x86 applications. 
rem Otherwise the batch file is running on Windows x86 with just 
rem one standard program files directory for all applications. 

:GetProgFilesDir 
if "%ProgramFiles(x86)%" == "" (
    set "PROGRAM_FILES=%ProgramFiles%" 
) else (
    set "PROGRAM_FILES=%ProgramFiles(x86)%" 
) 

echo Check Google Chrome installation 
if not exist "%PROGRAM_FILES%\Google\Chrome" goto SKIPG_CHROME 

echo Google Chrome is installed. 
goto :EOF 

:SKIPG_CHROME 
echo Google Chrome doesn't seem to be installed. 

Я не рекомендую определить версию Windows, по оценке архитектуры процессора. У меня есть машина с процессором x64, но она установлена ​​и работает под управлением Windows x86, поэтому нет каталога Program Files (x86), хотя процессор 64-разрядный.

+0

Это сработало !!! Большое спасибо, мой друг! – marym92

0

%ERRORLEVEL% возвращает 0, если утверждение верно (что ваша ОС на базе x86). Итак, теперь я знаю, почему пакет продолжает показывать Google Chrome не кажется ...

Просматривая свой сценарий, кажется, что вы пытаетесь обнаружить операционную систему. Сочетание systeminfo и find /i сделает трюк проще.

Заменить весь

Set RegQry=HKLM\Hardware\Description\System\CentralProcessor\0 
REG.exe Query %RegQry% > %usbpath%CheckOS.txt 
Find /i "x86" < %usbpath%CheckOS.txt > %usbpath%StringCheck.txt 

С

systeminfo | find /i "x64-based" > %usbpath%StringCheck.txt 
+0

Я думаю, что использование __systeminfo__ не является хорошей идеей для этой задачи. На компьютере я в настоящее время пишу этот комментарий, эта команда в настоящее время завершает работу с «выгрузкой информации о сетевой карте ... сбоем загрузки ошибки» в качестве последнего сообщения. Поэтому невозможно определить вообще, если установлена ​​Windows x86 или x64. – Mofi

Смежные вопросы