Существует не только 1 %windir%\System32
на Windows x64. Есть 2 таких каталога.
Настоящий каталог %windir%\System32
предназначен для 64-разрядных приложений. Этот каталог содержит 64-разрядный cmd.exe
.
Но есть также %windir%\SysWOW64
для 32-битных приложений. Этот каталог используется, если 32-разрядное приложение обращается к %windir%\System32
. Он содержит 32-битный cmd.exe
.
32-разрядные приложения могут обращаться к %windir%\System32
для 64-разрядных приложений с использованием %windir%\Sysnative
в пути.
Подробнее см. На странице Microsoft о File System Redirector.
Так что я думаю, что вы создали подкаталог run
в %windir%\System32
для 64-разрядных приложений и запустить 32-разрядную cmd
, для которого этот каталог не существует, как не существует подкаталог run
в %windir%\SysWOW64
который %windir%\System32
для 32-разрядных cmd.exe
.
Или вы создали подкаталог run
в %windir%\System32
для 32-битных приложений и запускать 64-битные cmd
, для которого этот каталог не существует, как не существует подкаталог run
в %windir%\System32
, потому что этот подкаталог существует только в %windir%\SysWOW64
.
Вы можете использовать следующие в верхней части вашего пакетного файла в случае подкаталога run
в %windir%\System32
для 64-разрядных приложений:
@echo off
set "SystemPath=%windir%\System32"
if not "%ProgramFiles(x86)%"=="" (
if exist %windir%\Sysnative\* set "SystemPath=%windir%\Sysnative"
)
Далее вам нужно вызвать каждое консольное приложение в System32\run
директории с %SystemPath%
в вашем командный файл, например %SystemPath%\run\YourApp.exe
.
Как это работает?
В Windows x86 нет переменной окружения ProgramFiles (x86) и поэтому на самом деле существует только 1 %windir%\System32
, как определено выше.
В Windows x64 есть переменная окружения ProgramFiles (x86) со значением. В Windows x64 дополнительно проверяется наличие файлов в %windir%\Sysnative
. В этом случае командный файл выполняется с 32-битным cmd.exe
, и только в этом случае необходимо использовать %windir%\Sysnative
. В противном случае %windir%\System32
может использоваться также и для Windows x64, как при запуске командного файла с 64-битным cmd.exe
, это каталог, содержащий 64-битные консольные приложения (и ваш подкаталог run
).
Примечание: %windir%\Sysnative
не является каталогом! Нельзя использовать cd
до %windir%\Sysnative
или использовать if exist %windir%\Sysnative
Вы используете один и тот же контекст пользователя для всех попыток? когда в 'C: \ WINDOWS \ system32', введите' dir/A: DRSH run'; каков результат? что показано, когда вы вводите 'attrib run' там? – aschipfl
Вот изображение: http://i.imgur.com/0QWH86S.jpg –
Что произойдет, если вы добавите '.' в каталог, например' cd run.'? – aschipfl