Windows x64 では1 つだけ ではありません。このようなディレクトリ%SystemRoot%\System32
が2 つあります。
実際の%SystemRoot%\System32
ディレクトリは 64 ビット アプリケーション用です。このディレクトリには、64 ビットの cmd.exe
.
%SystemRoot%\SysWOW64
しかし、32 ビット アプリケーション用もあります。このディレクトリは、32 ビット アプリケーションが にアクセスする場合に使用されます%SystemRoot%\System32
。32 ビットのcmd.exe
.
32 ビット アプリケーションは、パス%SystemRoot%\System32
のエイリアスを使用して 64 ビット アプリケーションにアクセスできます。%SystemRoot%\Sysnative
詳細については、File System Redirectorに関する Microsoft のドキュメントを参照してください。
したがって、サブディレクトリは64 ビット アプリケーション用run
に作成され、32 ビットが実行されます。32 ビット用のサブディレクトリがないか、32ビットアプリケーション用にサブディレクトリが作成され、64 ビットが実行されるため、このディレクトリは存在しません。このサブディレクトリは にのみ存在するため、 にはサブディレクトリがないため、このディレクトリが存在しない場合に-bitが実行されます。%SystemRoot%\System32
cmd
run
%SystemRoot%\SysWOW64
%SystemRoot%\System32
cmd.exe
run
%SystemRoot%\System32
cmd
run
%SystemRoot%\System32
%SystemRoot%\SysWOW64
run
次のコードは、サブディレクトリが%SystemRoot%\System32
64 ビット アプリケーションの場合、バッチ ファイルの先頭で使用できます。
@echo off
set "SystemPath=%SystemRoot%\System32"
if not "%ProgramFiles(x86)%" == "" if exist %SystemRoot%\Sysnative\* set "SystemPath=%SystemRoot%\Sysnative"
ディレクトリ内のすべてのコンソール アプリケーションは、バッチ ファイル内でSystem32\run
実行する必要があります (例: .%SystemPath%
%SystemPath%\run\YourApp.exe
使い方?
Windows x86 には環境変数ProgramFiles(x86)%SystemRoot%\System32
が存在しないため、実際には上部に定義されているのは 1 つだけです。
ただし、Windows x64 では、環境変数ProgramFiles(x86)に値が定義されています。%SystemRoot%\Sysnative
. _ この場合、バッチ ファイルは現在 32 ビットで処理されてcmd.exe
おり、この場合にのみ%SystemRoot%\Sysnative
使用する必要があります。それ以外の場合%SystemRoot%\System32
は、バッチ ファイルが 64 ビットcmd.exe
で処理される場合、Windows x64 でも使用できます。これは、64 ビット コンソール アプリケーションを含むディレクトリ (およびサブディレクトリrun
) です。
注:%SystemRoot%\Sysnative
ディレクトリではありません! またはを使用するcd
ことはできません。これは、32 ビットの実行可能ファイルにのみ存在する特別なエイリアスであるため、またはより一般的なを使用して、このパスを使用して 1 つ以上のファイルが存在するかどうかを確認する必要があります。%SystemRoot%\Sysnative
if exist %SystemRoot%\Sysnative
if exist %SystemRoot%\Sysnative\
if exist %SystemRoot%\Sysnative\cmd.exe
if exist %SystemRoot%\Sysnative\*