cmd.exe 自定义“在此处打开命令提示符”shell 扩展

cmd.exe 自定义“在此处打开命令提示符”shell 扩展

我想看看是否有人对以下情况有任何指点。我一直在根据需要自定义命令提示符,最近为我的用户更改了提示符。我希望它始终是窗口标题,而不是在提示符中显示路径。

我将新的注册表项放在

HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Command Processor/AutoRun

具有价值

title %cd% 

此脚本在命令提示符启动时运行。这有效。每当我通过快捷方式打开命令提示符时,它都会正常运行。

但是,每当我通过右键单击 -> 在这里打开命令提示符来打开命令提示符时,这显然不会执行。我尝试查看位于

HKEY_CLASSES_ROOT/Directory/shell/cmd/command

默认设置为:

cmd.exe /s /k pushd "%V"

我尝试将其更改为:

cmd.exe /s /k "cd %1 & title %cd%"

网上其他地方建议使用“%1”作为打开此处的脚本,如果我理解正确的话,& 应该可以执行这两个命令。但是,每次我在这里打开命令提示符时,它仍然不起作用。工作目录确实是正确的,窗口标题仍然是“C:\Windows\System32”

有什么指点吗?

答案1

您已经接近解决方案了。对我来说,以下命令有效:

cmd.exe /s /k "pushd ""%V"" & title %V"

编辑:注册表中有几个地方支持“此处输入命令提示符”外壳扩展。要使此更改在所有对象(目录、驱动器和特殊文件夹)中一致起作用,您必须在注册表中搜索所有出现的值cmd.exe /s /k pushd "%V"并将其替换为上述值。

答案2

试试这个网站吧,这些人真的很有帮助。他们对所有开关都有详细的说明。

http://ss64.com/nt/cmd.html

不,我和那个网站没有任何关系,我只是想帮忙。这些人以及 SuperUser.com 网站已经帮助过我数百次了。

CMD.exe 启动一个新的 CMD shell 并(可选)运行命令/可执行程序。

Syntax
      CMD [charset] [options]
      CMD [charset] [options] [/c Command] 
      CMD [charset] [options] [/k Command] 

Options   
   /C     Run Command and then terminate
   /K     Run Command and then return to the CMD prompt.
          This is useful for testing, to examine variables

   Command : The command, program or batch script to be run.
             This can even be several commands separated with '&' 
             (the whole should also be surrounded by "quotes")

   /T:fg  Sets the foreground/background colours 
   /X     Enable extensions to CMD.EXE
   /Y     Disable extensions to CMD.EXE 
   /A     Output ANSI characters
   /U     Output UNICODE characters (UCS-2 le)
          These options will affect piping or redirecting to a file.
          Most common text files are ANSI, use these switches
          when you need to convert the character set.
   /D Ignore registry AutoRun commands
      HKLM | HKCU \Software\Microsoft\Command Processor\AutoRun
   /F:ON Enable auto-completion of pathnames entered at the CMD prompt
   /F:OFF Disable auto-completion of pathnames entered at the CMD prompt (default)At the command prompt Ctrl-D gives folder name completion and Ctrl-F gives File and folder name completion.

These key-strokes will display the first matching path. Thereafter, repeated pressing of the same control key will cycle through the list of matching paths. Pressing SHIFT with the control key will move through the list backwards. 
   /Q    Turn echo off
   /S    Strip quote characters from the command_line
   /V:ON Enable delayed environment variable expansion 
         this allows a FOR loop to specify !variable! instead of %variable% 
         expanding the variable at execution time instead of at input time. 
   /V:OFF Disable delayed environment expansion.

   Environment expansion preference can be set permanently in the registry
   HKLM | HKCU  \Software\Microsoft\Command Processor\DelayedExpansion
   Set to either 0x1 or 0x0

   /knetdiag /debug 
   /knetdiag /fix

   The knetdiag switches are undocumented and work in XP only
   they list and (may) fix these networking issues.If /C or /K is specified, then the remainder of the command line is processed as an immediate command in the new shell. Multiple commands separated by the command separator '&' or '&&' are accepted if surrounded by quotes.

处理引号(“)字符的逻辑如下:

  1. 如果满足以下所有条件,则命令行上的引号字符将被保留:
    • 无 /S 开关(删除引号)
    • 正好两个引号字符
    • 两个引号字符之间没有特殊字符,特殊字符包括以下字符之一:& < >( ) @ ^ |
    • 两个引号字符之间有一个或多个空格字符
    • 两个引号之间的字符串是可执行文件的名称。
  2. 否则,旧的行为是查看第一个字符是否是引号字符,如果是,则删除命令行上的前导字符并删除最后一个引号字符,保留最后一个引号字符后的任何文本。要否定此行为,请在命令行的开头和结尾使用双引号“”。全屏组合键 ALT + ENTER 将 CMD 窗口切换到全屏模式。再次按 ALT + ENTER 返回正常窗口。Command.com 与 CMD.exe 这些页面上的所有命令都假定您正在运行 32 位或 64 位命令行 (cmd.exe)

提供旧的 16 位命令处理器 command.com 是为了向后兼容 16 位 DOS 应用程序。与 cmd.exe 相比,Command.com 的功能非常有限,例如,在许多命令之后,它将无法设置 %errorlevel%。

如果您使用扩展名 .CMD 而不是 .BAT 来命名批处理脚本,那么即使复制到 Windows 95 机器,它们也无法在 command.com 下运行。

如果您正在运行 CMD.EXE 或 command.com,则将显示 %COMSPEC% 环境变量

.CMD 和 .BAT 脚本(在 CMD.EXE 下运行)之间的一个主要区别是,在启用扩展的情况下,PATH/APPEND/PROMPT/SET/ASSOC 等命令如果成功,会将 ERRORLEVEL 重置为 0。在旧式 .BAT 文件中,除非出现新错误(源),否则 ERRORLEVEL 不会更改。在 64 位版本的 Windows 上,可以在 %windir%\SysWoW64\cmd.exe 中找到 32 位 CMD.exe。为了减少兼容性问题,WOW64 子系统通过重定向注册表调用和一些文件系统调用将 32 位二进制文​​件与 64 位二进制文​​件隔离开来。从 Windows 资源管理器打开 CMD 您可以通过选择 START、RUN、cmd、OK 注册表项来打开新的 CMD 提示符:;在命令提示符下允许 UNC 路径 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor] “DisableUNCCheck”=dword:00000001

;在 CMD.exe 启动时运行命令 [HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor] "AutoRun"=-

;激活自动完成 [HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor] "CompletionChar"=0x9

;对于 Windows 7:在 ;文件系统文件夹的上下文菜单中添加提升的“在此处打开 CMD 提示符(管理员)”选项:[HKEY_CLASSES_ROOT\Directory\shell\runas]@="在此处打开 CMD 提示符(管理员)" [HKEY_CLASSES_ROOT\Directory\shell\runas\command] @="cmd.exe /k pushd %L"

;对于 Windows 7:在“我的电脑”上下文菜单中添加提升的“在此处打开 CMD 提示符(管理员)”选项:[HKEY_CLASSES_ROOT\CLSID{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\runas] @="在此处打开 CMD 提示符(管理员)" [HKEY_CLASSES_ROOT\CLSID{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\runas\command] @="cmd.exe"先前命令的历史记录按向上箭头将列出在命令提示符下输入的先前命令。其他 DOSKEY 功能键默认加载(F7、F8、F9)复制和粘贴/快速编辑 为了简化在命令提示符下使用剪切和粘贴,请启用快速编辑模式,如下所示: 激活当前 cmd 窗口左上角的控制菜单,转到属性、选项选项卡,然后勾选快速编辑模式。 现在,您可以用鼠标选择文本,然后按 Enter(或右键单击)将其复制到剪贴板。 使用 Control+V(或右键单击)或通过菜单粘贴到任意位置。 ESC 将取消任何选择并返回编辑模式。 在窗口之间复制时,您可能需要单击一次以选择窗口,然后再次单击以粘贴。 运行 CMD.exe 的多个实例 在命令行或批处理脚本中,CMD 将启动一个新的 CMD.exe 实例,该实例将出现在同一窗口中。 EXIT 命令将关闭第二个 CMD 实例并返回到上一个 shell。

从另一个批处理脚本调用一个批处理脚本的方法是运行类似 CMD /c C:\docs\myscript.cmd 的命令

CMD 的输出可以重定向到文本文件。请注意,使用 CMD /c 时不需要 EXIT 命令。

环境变量 %CMDCMDLINE% 将扩展为传递给 CMD.EXE 的原始命令行。CMD.exe 的本机版本始终位于 %windir%\system32 中,在 64 位操作系统上,%windir%\SysWOW64 中还有一个 32 位 CMD.exe

暂停或停止批处理脚本 可以通过按 CTRL-S 暂停任何批处理脚本的执行 这也适用于暂停单个命令(如 DIR 列表) 按任意键将恢复操作。

按 CTRL-C 可以停止执行任何批处理脚本

如果一个批处理文件调用另一个批处理文件,则 CTRL-C 将退出两个批处理脚本。如果使用 CMD /c 从另一个批处理文件调用一个批处理文件,则 CTRL-C 将仅导致其中一个批处理脚本终止。(另请参阅 EXIT)

长命令和长文件名 在 Windows XP 下,CMD 命令行限制为 8,191 个字符。对于所有版本的 Windows,NTFS 和 FAT 允许路径名最多为 260 个字符。

解决路径名长度受限问题的方法是添加前缀 \?\,
例如:
\?\C:\TEMP\Long_Directory\Long_Filename.txt
ErrorLevel
CMD /C 将返回错误级别,例如 CMD /c dir Z:,其中驱动器 Z: 不存在,将向调用 CMD shell 返回 %errorlevel% = 1。
命令扩展
CMD.exe 的大部分功能都可以禁用 - 这将影响所有内部命令,命令扩展默认启用。这可以通过在注册表中设置一个值来控制:HKCU\Software\Microsoft\Command Processor\EnableExtensions 或者在 Win XP 下,您可以运行 CMD /e:on 或 CMD /e:off
示例:
运行程序并传递文件名参数:
CMD /c write.exe c:\docs\sample.txt
运行程序并传递长文件名:
CMD /c write.exe "c:\sample documents\sample.txt"
程序路径中的空格:
CMD /c ""c:\Program Files\Microsoft Office\Office\Winword.exe""
程序路径 + 参数中的空格:
CMD /c ""c:\Program Files\demo.cmd"" 参数 1 参数 2
程序路径 + 带空格的参数中的空格:
CMD /k ""c:\batch files\demo.cmd" "参数 1 带空格" "参数 2 带空格""
启动 Demo1,然后启动 Demo2:
CMD /c ""c:\Program Files\demo1.cmd" & "c:\Program Files\demo2.cmd""
“那些能指挥自己,就能指挥别人”——哈兹利特

有关的:

EXIT - 使用此选项关闭 CMD shell 并返回。
CALL - 从另一个调用一个批处理程序
START - 运行程序、命令或批处理文件
DOSKEY 编辑命令行,调用命令
Q156276 - Cmd 不支持 UNC 名称作为当前目录
Powershell:您可以在 Powershell 下运行 CMD shell,Exit 将返回到 PS 提示符。
等效 bash 命令(Linux): bash - 运行 bash shell(也包括 csh、ksh、sh)

相关内容