Alegom Posted March 8, 2014 at 10:09 PM Report #547950 Posted March 8, 2014 at 10:09 PM Hey. Estava a tentar criar um batch para correr o setup de um programa consoante a arquitectura é 32 ou 64 bits, mas não estou a conseguir. Trata-se do Office, e tenho um Setup.exe dentro de cada uma das pastas x86 e x64. Essas pastas estão na mesma directoria que o Batch. Isto é o que tenho: if %processor_architecture%==AMD64 .\x64\Setup.exe else .\x86\Setup.exe E obtenho da linha de comandos: The syntax of the command is incorrect. if AMD64==AMD64 (aparece como um comando corrido à parte?) Alguém me consegue dar uma ajuda? Obrigado.
Rui Carlos Posted March 8, 2014 at 11:20 PM Report #547954 Posted March 8, 2014 at 11:20 PM Usei a seguinte script e funcionou: IF PROCESSOR_ARCHITECTURE == amd64 OR PROCESSOR_ARCHITEW6432 == amd64 THEN ( echo 64 bits ) ELSE ( echo 32 bits ) Só deves precisar de substituir os echos. (Ideia retirada daqui, com alguns ajustes para resolver erros de sintaxe.) Rui Carlos Gonçalves
Alegom Posted March 9, 2014 at 12:42 AM Author Report #547958 Posted March 9, 2014 at 12:42 AM (edited) Obrigado pela resposta rápida. O problema era mesmo o THEN, parece. No entanto, ao correr o script, tanto o IF como o ELSE são executados, o que não faz sentido nenhum. Uma possível explicação é esta mensagem de erro que surgiu pelo meio: " 'ELSE' is not recognized as an internal or external command, operable program or batch file." No entanto, essa mensagem só surge se retirar os parênteses, o que me parece ser algo estranho para desencadear o comportamento, uma vez que só tem uma instrução, logo não haveria problema. Mas com ou sem parênteses, o script entra na mesma nas duas opções. Ideias? :S Edited March 9, 2014 at 12:46 AM by Alegom
Rui Carlos Posted March 9, 2014 at 12:17 PM Report #547968 Posted March 9, 2014 at 12:17 PM Pelo que li, os parêntesis são necessários, e é a forma do ELSE ser considerado a continuação do IF. Parece que a sintaxe dos batches files é bastante sensível a alguns detalhes. Eu executei a script que indiquei numa VM (Win XP), e funcionou devidamente. Qual é a script que estás a usar agora? Rui Carlos Gonçalves
Alegom Posted March 10, 2014 at 12:49 PM Author Report #548059 Posted March 10, 2014 at 12:49 PM (edited) Isto está a ficar mais estranho a cada minuto. O que estou a usar neste momento é: if PROCESSOR_ARCHITECTURE==AMD64 or PROCESSOR_ARCHITEW6432==AMD64 ( .\x64\Setup.exe ) else ( .\x86\Setup.exe ) Neste momento, ter os parênteses não afecta, envia a mensagem de erro na mesma. O THEN também parace que deixou de influenciar. Mas o que me está a deixar preocupado é que tanto o IF como o ELSE estão a ser corridos. Mesmo alterando o ELSE para um IF com a condição contrária, mal o primeiro .exe é fechado, o outro é aberto. Engraçado também é que pedi a um amigo para testar e funcionou bem. Por isso, que raio se passa neste computador? xD Edited March 10, 2014 at 01:05 PM by Alegom
Rui Carlos Posted March 10, 2014 at 01:15 PM Report #548064 Posted March 10, 2014 at 01:15 PM Eu alertei-te para o facto da sintaxe do batch ser sensível a pequenos detalhes, pelo que devias tentar manter o máximo da script que te indiquei. No teste que fiz, também tive problemas estranhos, que podem ser derivados da versão do SO usada. Pega no código que te indiquei, substitui apenas os echos, e vê se funciona. Em particular, coloca o ELSE na mesma linha que o ). Já agora, como é que negaste a condição? Rui Carlos Gonçalves
Alegom Posted March 10, 2014 at 02:02 PM Author Report #548068 Posted March 10, 2014 at 02:02 PM (edited) Ok. Seguindo a tua sugestão, de facto o erro do ELSE na linha de comandos desaparece, mas os dois Setup's continuam a ser executados sequencialmente. Mal fecho o primeiro, a linha de comandos mostra o comando no interior ELSE (como tinha feito para o do IF) e executa o outro. O que eu tinha experimentado em termos de negar a condição não foi ao nível da linguagem (não quis arriscar), foi pela lógica do link que enviaste. Ou seja, se é x86, então PROCESSOR_ARCHITECTURE=x86. Assim excluiria a questão do ELSE definitivamente. Mas continuou a entrar em ambas as condições. Update: Estive a explorar uma ideia, e parece que é possível estar relacionado. Esperimentei o script no PC de uma pessoa com W8.1 (como eu) e também deu o mesmo problema. Já a outra pessoa que tinha referido anteriormente, tem W7. Ao mudar de 7 para 8 a MS mudou o funcionamento da linguagem?! Edited March 10, 2014 at 06:10 PM by Alegom
Rui Carlos Posted March 10, 2014 at 06:22 PM Report #548112 Posted March 10, 2014 at 06:22 PM Não te consigo ajudar mais. Como disse, nos testes que fiz, a script que usei funcionou. Rui Carlos Gonçalves
Alegom Posted March 10, 2014 at 11:40 PM Author Report #548153 Posted March 10, 2014 at 11:40 PM (edited) Não tem problema. Só tenho que agradecer por toda a ajuda que me prestaste, já aprendi muito que não sabia antes. No entanto, decidi experimentar colocar a dúvida em mais um local e acho que consegui resolver. Por isso aqui fica a solução, para alguém que também esteja interessado. @echo off if %PROCESSOR_ARCHITECTURE%==AMD64 goto :x64 if %PROCESSOR_ARCHITEW6432%==AMD64 goto :x64 :x86 start .\x86\Setup.exe exit :x64 start .\x64\Setup.exe exit A ideia é que os IF's não funcionam da forma que outras linguagens nos habituam. É preciso utilizar o comando GOTO e depois direccionar a execução do código, através do comando EXIT, de modo a evitar correr segmentos não desejados. Mais uma vez obrigado, Rui. Espero que este post também te ajude de alguma forma, quanto mais não seja o satisfazer da curiosidade. Fica bem. EDIT: Afinal o OR não estava a funcionar, na medida em que a lógica em Batch é feita de forma diferente. Por isso actualizei o código para corrigir a situação, de uma forma simplificada. O START faz com que o programa execute sem que a linha de comandos esteja aberta simultaneamente, sendo fechada depois de o iniciar. Edited March 11, 2014 at 06:49 PM by Alegom 1 Report
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now