不同版本的 Windows 中 PATHEXT 环境变量的默认值是什么?或者更好的是:当系统上 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
。
答案1
Windows XP中的默认值:
.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH
Windows Vista、7、8 和 10 中的默认值也在 Server 2008 R2 中得到确认:.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!
)
答案2
只需一点点工作,您就可以使用批处理脚本进行一些验证:
FOR /F "tokens=* delims=;" %%A IN (".COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC") DO @echo %%A
注意:以上示例用于批处理文件。如果要直接在 CMD 提示符下运行,请将 %%A 更改为 %A 以查看结果。
然后,您可以比较或计算结果。例如,如果不匹配,则发送警报。
希望这可以帮助!