Eu tenho três soluções possíveis para o seu problema:
1) Use um arquivo de lote de wrapper
Em uma empresa em que eu trabalhava, tínhamos um único arquivo em lote para tudo o que é executado. Fizemos isso para simplificar a interação com nossos usuários, mas funcionaria de maneira semelhante. Se você quiser, poderá criar um wrapper para cada arquivo em lote (basicamente, criar dois arquivos em lotes) ou criar um único wrapper que permita selecionar cada arquivo em lote de um menu (conforme descrito link ). Você pode fazer com que cada seleção de menu identifique o caminho para o arquivo de lote a ser executado e, em seguida, você pode fazer com que o wrapper escolha o cmd.exe correto para iniciá-lo.
2) Use o arquivo em lote como um empacotador automático
Para cada arquivo em lote, você pode incluir um cabeçalho que determina em qual SO você está (32 ou 64 bits). Se você estiver em um sistema operacional de 64 bits, saberá que, por padrão, está sendo iniciado usando a versão de 64 bits do cmd.exe. Você poderia ter esse arquivo, em seguida, iniciar a versão de 32 bits do cmd.exe com o mesmo arquivo em lotes, mas você também pode passar o arquivo em lote um sinalizador que diz para ignorar a verificação de 64 bits. Em seguida, ele seria executado sob o cmd.exe de 32 bits correto.
Por exemplo:
@ECHO Off
::Check if 64-bit check skip flag exists
IF %1 == /skipcheck (goto run)
::Check if OS is 64-bit
IF %processor_architecture%==AMD64 (<path_to_32-bit_cmd> /c "<path_to_batch_file>\<name_of_my_batch_file>" /skipcheck)
IF %processor_architecture%==AMD64 (goto end)
:run
echo Hello World!
:end
Eu não testei o código acima, então eu posso ter algumas citações ou parênteses no lugar errado, mas esta é a idéia geral.
3) Migrar para o PowerShell
O PowerShell está disponível para todos os sistemas operacionais Windows XP e mais recentes. O PowerShell é projetado pela Microsoft para, eventualmente, substituir o cmd.exe simples e fornece uma linguagem rica para executar praticamente qualquer tarefa. A maioria dos programas em lote é realmente executável no PowerShell e, no máximo, pode exigir ajustes mínimos.