命令提示符中禁用的扩展有哪些变化?
What disabled extensions change in command prompt?
使用 cmd /e:off
或使用 setlocal disableExtensions
(在批处理文件中)启动命令提示符或通过注册表值 HKEY_CURRENT_USER\Software\Microsoft\Command Processor\EnableExtensions
(通过将值设置为 0)排除它们的功能称为“扩展”的功能已禁用(默认打开)。
这会导致哪些变化?
关闭扩展会影响一些 built-in 环境变量和命令提示符命令的一些内部变量。我从未见过 non-working 变量的完整列表,尽管内部命令或多或少都有很好的记录 - 但从未放在一起列表中。
我。我将从变量:
开始
%CD%
无效。但令人惊讶的是 %__CD__%
尽管它在末尾设置了额外的反斜杠,但仍然有效。
%CMDEXTVERSION%
- 在某种程度上合乎逻辑,因为命令提示符仅减少到其早期版本
%CMDCMDLINE%
- 可以使用一些外部工具检索命令行,这些工具将为您提供有关当前 PID 的信息。
%ERRORLEVEL%
- 作为替代 %=ExitCode%
可以使用。另外 %=ExitCodeAscii%
如果退出代码高于 32。IF ERRORLEVEL
也仍然有效。
%DATE%
和 %TIME%
- 虽然在禁用扩展模式下你不能将当前日期分配给变量,但至少有很多方法可以 display it .
%RANDOM%
%HighestNumaNodeNumber%
- 这对我来说是最大的惊喜,因为这个变量是在 Windows 的较新版本中引入的,当时添加了对多核处理器的支持。它与仍在工作的 START
命令的 /NODE 开关高度相关。
二.命令:
TAB 不再是命令提示符中的自动完成文件 names.Only。
通过扩展名启动文件 - 在禁用扩展名模式下,cmd 将不会考虑 HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts
和 //HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.ext\OpenWithList
并且只会直接启动“程序” - 即[中描述的扩展名=28=]变量。
变量操作 - 替换和子字符串不适用于禁用的扩展。这意味着只有在禁用扩展的情况下,您才能打印 %=::%
的值 - 仅在命令提示符未以 admin privileges.
启动时定义的未记录变量
ASSOC
和 FTYPE
- 在禁用的扩展下不可用 - 与此处的第一点相关。
CALL
- 不再能够调用标签,但不再支持其他 scripts.Argument 修饰符(也在 FOR
命令中) - %~0
、%~dp0
, %~n0
将不再有效。只能通过 %0
,%1
..
进行普通访问
COLOR
- 不再可用。虽然可以使用 other scripts.
更改颜色
IF
- /我不工作。三字母比较运算符(可用于整数比较)不可用 - 仅 ==
。 CMDEXTVERSION 不是选项的一部分,也不是 DEFINED 的一部分。
EXIT
- Exit /b 有效,但在尝试查找 :EOF 标签时打印一条错误消息。在批处理文件中无法观察到打印错误 'officially' documented.Only。
FOR
- 减少到只有基本的 for 循环 - 附加开关 /F 、 /D 、 /R 、 /L 不可用。令牌修饰符将不再以类似 CALL 参数的方式工作。
SHIFT
- /N 开关不起作用,尽管没有 'officially' 记录。
GOTO
- :EOF 标签不再可用。
SET
- 开关 /P 和 /A 不再起作用。不接受双引号作为命令的一部分(例如 set "variable=value"
将导致错误)。不再可能列出以字符串开头的变量(例如 set path
会导致错误)。只能简单地设置一个变量值。
PUSHD
- 不再将临时驱动器映射到 UNC 路径,并且 POPD
不会删除此类驱动器。没有正式记录。
PROMPT
- 不支持$+
和$M
特殊代码
HELP
命令值得一提,因为它不会检测扩展是打开还是关闭,并且会在扩展可用时打印帮助消息。
因为 COLOR
, ASSOC
, FTYPE
(并且 IF DEFINED
不工作)是唯一关闭禁用扩展的命令是最好的选择之一检查它们是否已启用(尽管 COLOR 会更改配色方案)。
但是如果没有帮助消息,它们的输出会太大,而且帮助消息也不会那么小——这意味着即使重定向到 null 也会减慢检查速度。
最终这也可用于检测扩展是否已启用:
call ::eof >nul 2>&1 && (
echo extensions are enabled
)||(
echo extensions are disabled
)
或者将 assoc 或 ftype 与默认可用的扩展一起使用:
assoc .bat >nul 2>&1 && (
echo extensions are enabled
)||(
echo extensions are disabled
)
使用 ftype:
ftype batfile >nul 2>&1 && (
echo extensions are enabled
)||(
echo extensions are disabled
)
使用 cmd /e:off
或使用 setlocal disableExtensions
(在批处理文件中)启动命令提示符或通过注册表值 HKEY_CURRENT_USER\Software\Microsoft\Command Processor\EnableExtensions
(通过将值设置为 0)排除它们的功能称为“扩展”的功能已禁用(默认打开)。
这会导致哪些变化?
关闭扩展会影响一些 built-in 环境变量和命令提示符命令的一些内部变量。我从未见过 non-working 变量的完整列表,尽管内部命令或多或少都有很好的记录 - 但从未放在一起列表中。
我。我将从变量:
开始%CD%
无效。但令人惊讶的是 %__CD__%
尽管它在末尾设置了额外的反斜杠,但仍然有效。
%CMDEXTVERSION%
- 在某种程度上合乎逻辑,因为命令提示符仅减少到其早期版本
%CMDCMDLINE%
- 可以使用一些外部工具检索命令行,这些工具将为您提供有关当前 PID 的信息。
%ERRORLEVEL%
- 作为替代 %=ExitCode%
可以使用。另外 %=ExitCodeAscii%
如果退出代码高于 32。IF ERRORLEVEL
也仍然有效。
%DATE%
和 %TIME%
- 虽然在禁用扩展模式下你不能将当前日期分配给变量,但至少有很多方法可以 display it .
%RANDOM%
%HighestNumaNodeNumber%
- 这对我来说是最大的惊喜,因为这个变量是在 Windows 的较新版本中引入的,当时添加了对多核处理器的支持。它与仍在工作的 START
命令的 /NODE 开关高度相关。
二.命令:
TAB 不再是命令提示符中的自动完成文件 names.Only。
通过扩展名启动文件 - 在禁用扩展名模式下,cmd 将不会考虑 HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts
和 //HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.ext\OpenWithList
并且只会直接启动“程序” - 即[中描述的扩展名=28=]变量。
变量操作 - 替换和子字符串不适用于禁用的扩展。这意味着只有在禁用扩展的情况下,您才能打印 %=::%
的值 - 仅在命令提示符未以 admin privileges.
ASSOC
和 FTYPE
- 在禁用的扩展下不可用 - 与此处的第一点相关。
CALL
- 不再能够调用标签,但不再支持其他 scripts.Argument 修饰符(也在 FOR
命令中) - %~0
、%~dp0
, %~n0
将不再有效。只能通过 %0
,%1
..
COLOR
- 不再可用。虽然可以使用 other scripts.
IF
- /我不工作。三字母比较运算符(可用于整数比较)不可用 - 仅 ==
。 CMDEXTVERSION 不是选项的一部分,也不是 DEFINED 的一部分。
EXIT
- Exit /b 有效,但在尝试查找 :EOF 标签时打印一条错误消息。在批处理文件中无法观察到打印错误 'officially' documented.Only。
FOR
- 减少到只有基本的 for 循环 - 附加开关 /F 、 /D 、 /R 、 /L 不可用。令牌修饰符将不再以类似 CALL 参数的方式工作。
SHIFT
- /N 开关不起作用,尽管没有 'officially' 记录。
GOTO
- :EOF 标签不再可用。
SET
- 开关 /P 和 /A 不再起作用。不接受双引号作为命令的一部分(例如 set "variable=value"
将导致错误)。不再可能列出以字符串开头的变量(例如 set path
会导致错误)。只能简单地设置一个变量值。
PUSHD
- 不再将临时驱动器映射到 UNC 路径,并且 POPD
不会删除此类驱动器。没有正式记录。
PROMPT
- 不支持$+
和$M
特殊代码
HELP
命令值得一提,因为它不会检测扩展是打开还是关闭,并且会在扩展可用时打印帮助消息。
因为 COLOR
, ASSOC
, FTYPE
(并且 IF DEFINED
不工作)是唯一关闭禁用扩展的命令是最好的选择之一检查它们是否已启用(尽管 COLOR 会更改配色方案)。
但是如果没有帮助消息,它们的输出会太大,而且帮助消息也不会那么小——这意味着即使重定向到 null 也会减慢检查速度。
最终这也可用于检测扩展是否已启用:
call ::eof >nul 2>&1 && (
echo extensions are enabled
)||(
echo extensions are disabled
)
或者将 assoc 或 ftype 与默认可用的扩展一起使用:
assoc .bat >nul 2>&1 && (
echo extensions are enabled
)||(
echo extensions are disabled
)
使用 ftype:
ftype batfile >nul 2>&1 && (
echo extensions are enabled
)||(
echo extensions are disabled
)