Вопрос:
Пока в cmd или создании командного файла я не могу использовать команду msg. Когда я пытаюсь использовать его, он возвращает ошибку msg is not recognized as an internal or external command, operable program or batch file. “Я уверен, что ошибка в том, что я потерял msg.exe в system32, так что может кто-нибудь показать, как это получить? Я запускаю Windows 8.1.
Лучший ответ:
msg.exe не доступен на всех платформах Windows во всех средах.
Существует только %SystemRoot%System32msg.exe (64-разрядная %SystemRoot%SysWOW64msg.exe), но нет %SystemRoot%SysWOW64msg.exe (32-разрядная версия) для Windows 7 x64 Enterprise, из-за чего необходимо получить доступ к 64-разрядному msg.exe из в 32-битном командном процессе, используя %SystemRoot%Sysnativemsg.exe.
Дополнительные сведения о System32, SysWOW64 и Sysnative см. В статье Microsoft о Sysnative файловой системы
Что это значит?
-
Для запуска пакетного файла на 32-разрядной Windows необходимо запустить %SystemRoot%System32msg.exe.
-
Командный файл, выполняемый в 64-разрядной Windows 64-разрядным cmd.exe должен запускать %SystemRoot%System32msg.exe.
-
Командный файл, выполняемый в 64-разрядной Windows 32-разрядным cmd.exe должен запускать %SystemRoot%Sysnativemsg.exe.
Это зависит от ширины битов родительского процесса, начиная с cmd.exe или командного файла, который неявно приводит к запуску cmd.exe для исполнения командного файла, если пакетный файл выполняется в 32-разрядной или 64-разрядной среде на 64-битной Windows,
Таким образом вызывается пакетный файл с использованием явно %SystemRoot%Sysnativecmd.exe из 32-разрядного приложения в Windows x64 или внутри пакетного файла %SystemRoot%Sysnativemsg.exe используется на машине Windows x64 во время работы необходимо использовать Windows x86 %SystemRoot%System32cmd.exe %SystemRoot%System32msg.exe.
Демо-пример для первого варианта с использованием 64-разрядного интерпретатора командной строки:
Пакетный файл с именем MsgDemo.bat:
@echo off %SystemRoot%System32msg.exe /? pause
вызывается из 32-разрядного процесса, выполняющегося в Windows x64, с:
%SystemRoot%Sysnativecmd.exe /C MsgDemo.bat
Демо-пример для второго варианта с правильной ссылкой msg.exe:
@echo off set «AppMsg=%SystemRoot%System32msg.exe» if not «%ProgramFiles(x86)%» == «» ( rem Explicitly reference 64-bit version on Windows x64 as there is rem no 32-bit version. But use Sysnative redirector only if the batch rem file was started with 32-bit cmd.exe as otherwise System32 contains rem msg.exe if it is not missing at all like on Windows 7 Home Premium. if exist %SystemRoot%Sysnative* set «AppMsg=%SystemRoot%Sysnativemsg.exe» ) %AppMsg% /? set «AppMsg=» pause
Редиректор %SystemRoot%Sysnative не существует для 64-битных процессов, только для 32-битных процессов.
%SystemRoot%Sysnative не является каталогом. Поэтому, if exist %SystemRoot%Sysnative не работает, просто if exist %SystemRoot%Sysnative*.
Ответ №1
Скопируйте файл msg.exe из любого ПК с Windows 7 из каталога system32 и прошлого целевого ПК system32.
Работа для меня отлично