Hay no solo 1 %SystemRoot%System32
en Windows x64. Existen 2 tales directorios.
El Real %SystemRoot%System32
El directorio es para aplicaciones de 64 bits. Este directorio contiene un archivo de 64 bits. cmd.exe
.
Pero tambien hay %SystemRoot%SysWOW64
para aplicaciones de 32 bits. Este directorio se usa si una aplicación de 32 bits accede %SystemRoot%System32
. Contiene un 32 bits cmd.exe
.
Las aplicaciones de 32 bits pueden acceder %SystemRoot%System32
para aplicaciones de 64 bits mediante el alias %SystemRoot%Sysnative
en camino.
Para obtener más detalles, consulte la documentación de Microsoft sobre Redirector del sistema de archivos.
Entonces el subdirectorio run
fue creado en %SystemRoot%System32
para aplicaciones de 64 bits y 32 bits cmd
se ejecuta para el que este directorio no existe porque no hay subdirectorio run
en %SystemRoot%SysWOW64
cual es %SystemRoot%System32
para 32 bits cmd.exe
o el subdirectorio run
fue creado en %SystemRoot%System32
para aplicaciones de 32 bits y 64 bits cmd
se ejecuta para el que este directorio no existe porque no hay subdirectorio run
en %SystemRoot%System32
ya que este subdirectorio existe solo en %SystemRoot%SysWOW64
.
El siguiente código podría usarse en la parte superior del archivo por lotes en caso de subdirectorio run
es en %SystemRoot%System32
para aplicaciones de 64 bits:
@echo off
set "SystemPath=%SystemRoot%System32"
if not "%ProgramFiles(x86)%" == "" if exist %SystemRoot%Sysnative* set "SystemPath=%SystemRoot%Sysnative"
Cada aplicación de consola en System32run
el directorio debe ejecutarse con %SystemPath%
en el archivo por lotes, por ejemplo %SystemPath%runYourApp.exe
.
¿Cómo funciona?
No hay variable de entorno. Archivos de programa (x86) en Windows x86 y, por lo tanto, solo hay una %SystemRoot%System32
como se define en la parte superior.
Pero se define la variable de entorno Archivos de programa (x86) con un valor en Windows x64. Por lo tanto, también se verifica en Windows x64 si hay archivos en %SystemRoot%Sysnative
. En este caso, el archivo por lotes se procesa actualmente por 32 bits cmd.exe
y solo en este caso %SystemRoot%Sysnative
necesita ser utilizado en absoluto. De lo contrario %SystemRoot%System32
también se puede utilizar en Windows x64, ya que cuando el archivo por lotes es procesado por 64 bits cmd.exe
, este es el directorio que contiene las aplicaciones de consola de 64 bits (y el subdirectorio run
).
Nota: %SystemRoot%Sysnative
no es un directorio! No es posible cd
para %SystemRoot%Sysnative
o usar if exist %SystemRoot%Sysnative
o if exist %SystemRoot%Sysnative
. Es un alias especial que existe solo para ejecutables de 32 bits y, por lo tanto, es necesario verificar si existen uno o más archivos al usar esta ruta usando if exist %SystemRoot%Sysnativecmd.exe
o más general if exist %SystemRoot%Sysnative*
.