1

Какое значение по умолчанию для переменной среды PATHEXT для разных версий Windows? Или даже лучше: как вы можете надежно определить исходное системное значение по умолчанию для PATHEXT в системе, если оно могло быть изменено установленным программным обеспечением, групповой политикой и т.д.?

Я заинтересован в Windows 7, 8 и 10 как минимум. К сожалению, у меня нет свежих систем, чтобы проверить это.

Для общей педагогики: переменная окружения PATHEXT определяет, какие расширения файлов Windows считает исполняемыми командами. Например, моя система имеет:

PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC

Когда вы вводите команду в cmd.exe, такую как explorer Windows будет искать файлы с этими расширениями (в этом порядке), чтобы определить, выполнять ли приложение / файл. explorer обычно разрешает explorer.exe который находится в PATH по адресу c:\windows\explorer.exe .

2 ответа2

1

Значение по умолчанию в Windows .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH

Значение по умолчанию в Windows Vista, 7, 8 и 10 - также подтвердили в Server 2008 .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC

Если ваше значение не совпадает с этим, оно было изменено, это стандартные значения по умолчанию. .MSC является единственным дополнением, поскольку Windows XP, управляющий файл оснастки консоли управления Microsoft, используется для таких вещей, как редактор групповой политики gpedit.msc .

Дальнейшее чтение: Википедия

Вы можете запустить следующую партию или ее вариант, чтобы быстро увидеть, были ли они изменены.

@echo off
setlocal
for /f "tokens=4-5 delims=. " %%i in ('ver') do set VERSION=%%i.%%j

IF "%version%" == "5.1" GOTO windowsxp
IF "%version%" == "5.2" GOTO windowsxp

:windowsabovexp

set "PATHEXTORIGINAL=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC"

GOTO compare

:windowsxp

set "PATHEXTORIGINAL=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH"

:compare

if not "%PATHEXT%" == "%PATHEXTORIGINAL%" (
   echo PATHEXT has been modified!
) else (
   echo PATHEXT is expected!
)
0

Немного поработав, вы можете выполнить некоторую проверку, используя пакетный скрипт:

FOR /F "tokens=* delims=;" %%A IN (".COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC") DO @echo %%A

ПРИМЕЧАНИЕ. Приведенный выше пример предназначен для использования в командном файле. Если вы хотите запускать напрямую по приглашению CMD, измените %% A на% A, чтобы увидеть результаты.

Затем вы можете сравнить или посчитать результаты. Если он не совпадает, отправьте предупреждение, например.

Надеюсь это поможет!

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .