Avatar billede PJ67 Juniormester
18. maj 2021 - 14:57 Der er 5 kommentarer og
1 løsning

Tjek af enten x86 eller x64 arkitektur før fortsættelse

Hej :-)

Jeg sidder og er ved at lave en afsluttende opdateringspakke til Office 2010 32-bit + en til 64 bit, hvor det er vigtigt, at den ikke starter, hvis den installerede version (x86/x64) er den forkerte ift. den valgte opdateringspakke.

Jeg tager udgangspunkt i et open source program (WSUS Offline Update), men vil gerne have en "bremse" indbygget, så programmet ikke starter, hvis den valgte pakke er den forkerte. Programmet er nemlig ikke altid godt nok til at vælge de rigtige filer.

Jeg har derfor lavet en "reg query" forespørgsel i "cmd.exe", hvor koden skal afvikles under hele forløbet.

Formålet er at læse den specifikke data fra strengen "Bitness". Det vil enten være "x86" eller "x64". Og denne streng går altid igen uanset installationsniveau af Office 2010 - også selvom Word er installeret og købt som et selvstændigt produkt. Dette er undersøgt på nettet.

Koden er:
for /F "tokens=3" %A in (reg query "HKLM\SOFTWARE\Microsoft\Office\14.0\Outlook" /v "Bitness"') DO (Echo %A)

Herefter svarer kommandoprompten i den samlede kode:
A) var ikke ventet på dette tidspunkt

Kører man koden "rent" i cmd er svaret:
C:\>(Echo x64 )
x64

Jeg er ikke programmør, men dog logisk tænkende og erfaren computerbruger. Jeg vil derfor gerne høre, om nogen ved, hvordan jeg eventuelt efterfølgende får resultatet af "echo" til at blive til en "if"-mulighed eller andet, der får koden til at enten fortsætte eller stoppe op alt efter, om det er x64 eller ej.
Avatar billede Spotgun Seniormester
18. maj 2021 - 15:30 #1
Når du bruger for loops i et script, i stedet for direkte i kommandoprompten, så skal der et % mere på variablen. Prøv derfor med:

for /F "tokens=3" %%A in (reg query "HKLM\SOFTWARE\Microsoft\Office\14.0\Outlook" /v "Bitness"') DO (Echo %%A)
Avatar billede ejvindh Ekspert
18. maj 2021 - 15:36 #2
Nu er min batch-programmering lidt rusten, efterhånden, men jeg kan se rundt omkring på nettet, at man plejer at have to % foran variablerne. Fx her:
https://ss64.com/nt/for.html

Så, hvad får du, hvis du skriver:
for /F "tokens=3" %%A in (reg query "HKLM\SOFTWARE\Microsoft\Office\14.0\Outlook" /v "Bitness"') DO (Echo %%A)
Avatar billede PJ67 Juniormester
18. maj 2021 - 15:51 #3
Spotgun + ejvindh > Jeg har prøvet at skrive et ekstra % på ved begge a'er. Nu brokker cmd sig ikke mere. Men jeg mangler stadigvæk at få lavet en kobling mellem resultatet af data (x86) eller (x64) fra "Bitness"-strengen.

Tidligere har jeg leget med:

if %errorlevel% == 0 goto x
if %errorlevel% == 1 goto y

Men det virker kun, når der skal undersøges om en streng eller andet findes. Ikke indholdet/dataene i selve strengen.
Avatar billede PJ67 Juniormester
18. maj 2021 - 15:57 #4
Altså hvordan valideres der om data i strengen er det ønskede, så programmet enten kan fortsætte eller alternativt stoppe, hvis det er den forkerte version, så der ikke sker ulykker.
Avatar billede arne_v Ekspert
18. maj 2021 - 16:42 #5
Echo %%A

->

if %%A == x64 goto x64pc

og

:x64pc
...
Avatar billede PJ67 Juniormester
18. maj 2021 - 17:04 #6
arne_v > Tusind tak, det virkede! Jeg har ledt længe på nettet efter en løsning, men kunne kun finde frem til noget kode, der gav andet end et "echo". Det er jo egentlig ret logisk, men troede ikke, det var tilstrækkeligt.

Også tak til I andre to for at finde fejlen i det første. :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester