打开命令提示符时自动执行命令


21

我正在寻找一种在Windows中打开命令提示符时自动执行一些控制台命令的方法,特别是设置一些命令别名的方法。

例如,当打开命令提示符时,我希望自动运行以下命令,以便ls代替dir

doskey ls=dir

如何才能做到这一点?



3
Windows XP没有DOS。
2011年

@KContreau,有兴趣的人。因此,这就是我的批处理在执行“开始/单独”命令后不保存doskey替代项的原因,而仅使用“ cmd / k”或“ cmd / c” ... ...
kokbira 2011年

在“澄清”版之后,我们是否必须更改问题标题?
kokbira 2011年

1
@KCotreau:从技术上讲,它是Win32 Console子系统的一部分,不特定于cmd.exe
user1686 2011年

Answers:


9

如果您希望它在启动时(而不是在登录时)加载,如果您拥有XP Pro(XP主页不包含gpedit.msc),请执行以下操作:

开始>运行> gpedit.msc

然后按回车。然后从命令行运行gpupdate / force。

计算机配置> Windows设置>脚本>启动

并将位置添加到脚本中。

您还可以针对以下用户登录进行此操作

用户配置> Windows设置>脚本>启动

如果您有XP Home,则可以将脚本复制到以下任一位置:

C:\ Windows \ System32 \ GroupPolicy \ Machine \ Scripts \ Startup

在启动时加载它们,或:

C:\ Windows \ System32 \ GroupPolicy \ User \ Scripts \ Logon

用于在登录时为用户加载它们。GroupPolicy文件夹被隐藏。


1
我更喜欢这种方法而不是将其放在启动文件夹中。使它更加持久。
乔·泰勒

1
@乔·泰勒谢谢。老实说,我仅将Startup文件夹用于启动Outlook之类的事情。从系统管理的角度来看,这是一种更标准的方式。
KCotreau

@KContreau,您的解决方案非常有用,但不适用于这种情况。我进行了测试,但是它无法执行doskey替换命令...
kokbira 2011年

@kokbira最初的问题只是“如何在XP中启动时运行脚本?”,我想我回答的正确。他编辑并添加了“例如,和doskey ls = dir”部分。
KCotreau

1
@KContreau,您是对的,他的问题是此问题的标题不正确。他在“澄清”中说,他希望“当我启动DOS提示符时运行一些DOS命令,主要是设置一些别名 ”。在Windows启动时执行一些命令,您的解决方案就可以了,但是要运行别名则不行。
kokbira 2011年

47

命令别名特定于您在其上配置它们的控制台窗口,因此启动脚本将不起作用。您可以这样操作:

  1. .cmd使用doskey命令创建一个批处理文件(),然后将其放在“应用程序数据”中。

  2. 将其配置为在打开cmd时自动启动。设置在注册表中:

    • 键: HKCU\SOFTWARE\Microsoft\Command Processor
    • 值: AutoRun
    • 类型:REG_EXPAND_SZ
    • 数据: "%AppData%\aliases.cmd"

1
对于Win2K虚拟OS来说,这是一个很好的解决方案,我希望命令提示符始终加载我的编译器路径。唯一的区别是使用了REG_SZ而不是REG_EXPAND_SZ
James

这是一个很好的解决方案。偶然地,有什么方法可以抑制初始输出?
nburr

1
@Nickolas:像往常一样将命令重定向到NUL吗?
user1686'9

无论如何它都可能会干扰Windows资源编译器(rc.exe),并导致诸如“系统找不到指定的路径”之类的错误,因此效果很好。请参阅Visual Studio Shell隔离项目无法编译
User5910

我通过设置首先检查文件是否存在来解决此问题:if exist "%AppData%\aliases.cmd" "%AppData%\aliases.cmd"
User5910

4

不同的命令解释器以不同的方式处理命令别名。

Microsoft的CMD依靠Win32控制台子系统提供其命令别名机制。该doskey命令实际上与流程的控制台进行交互,而控制台本身拥有别名。因此,别名是按控制台的并且是瞬态的。

JP Software的TCC / LE自己处理别名。该alias命令允许查看和操作别名,这些别名可以是“本地”或“全局”。别名仍然是暂时的,但是要么对一个命令解释器进程专用,要么在所有命令解释器进程之间共享(跨所有控制台)。

外壳如Korn外壳SFUA实用工具 -其工具在运行子系统基于UNIX的应用程序自带正确的,在与Windows 7旗舰版和Windows Server 2008 R2(适用于Windows XP的箱子,可以下载和安装UNIX 3.5版的服务。)— cygwin的Bourne Again shell 同样也处理别名。别名是暂时的,并且是按命令解释程序进行的。

自动加载默认的初始别名集也会因命令解释器而异。

在所有情况下,都可以使用命令在某种脚本中设置别名。

grawity已经给出了导致Microsoft CMD在启动时运行命令的两个注册表项之一。不幸的是,即使别名本身是按控制台存储的,这也是每个命令解释器的过程。从最初的命令解释器启动第二个命令解释器,对默认别名的任何手动更改将被重置。至少每个控制台仅执行一次初始化的另一种方法是,在启动命令解释器的快捷方式中添加/K调用doskey命令尾部的命令脚本的选项和名称。

JP Software的TCC / LE 在启动时会自动运行TCSTART脚本。同样,这是每个命令解释器的过程。但是,TCC的“本地”别名也是按命令解释程序进行的,因此,如果使用本地别名,这是初始化别名的正确位置。对于全球的别名,只需创建一个快捷方式Startup的文件夹,从一个文件(负载别名alias /r),然后运行shralias命令,让他们坚持后的快捷方式运行结束。

对于Bourne Again和Korn壳,只需在其他平台上对这些壳进行操作即可。对Bourne Again shell 使用和脚本中的alias命令;并使用的命令,ENV和脚本Korn外壳。$HOME/.profile$HOME/.bashrcalias$HOME/.profile$HOME/.kshrc


2

重力的答案对我来说非常有用。

我在Documents文件夹中创建了一个shell-aliases.cmd脚本(以后可以找到它)。

然后在注册表项中创建“ AutoRun”可扩展字符串值:

'HKEY_CURRENT_USER \ Software \ Microsoft \ Command Processor'

将值设置为别名文件的完整路径(我的文件位于“ C:\ Users \ Lee \ Documents \ shell-aliases.cmd”中)。

重新加载命令提示符后,我的doskey别名就起作用了。另外,我的别名文件很容易访问,并且可以编辑,可以添加更多内容。


0

有几个位置可以使用,但是开始菜单>启动文件夹可能是最简单的。

运行“ msconfig”,查看启动了哪些程序以及原因。您可以将程序添加到其中一个列表中(例如,在注册表中)。


0

这里的问题是,如果您在启动时执行此操作,则这些替换仅在打开的CMD提示符下可用。如果关闭,所有这些替换将丢失,并且必须为每个打开的命令提示符再次进行替换。

因此,一些替代方法(您可以将它们组合在一起):

一,创建批处理和快捷方式:

  1. 使用这些宏创建一个批处理并将其保存到某个已知位置(例如c:\ apps \ mycmd.bat)。
  2. 在桌面(或您想要的地方)中为其创建快捷方式,将“ cmd / k”放在其路径之前(例如“ cmd /kc:\apps\mycmd.bat”)。
  3. 因此,每次打开该快捷方式时,所有命令都将运行。

二。在PATH环境变量中创建一个批处理和一个条目:

  1. 使用这些宏创建一个批处理并将其保存到某个已知位置(例如c:\ apps \ mycmd.bat)。
  2. 转到控制面板>系统>高级配置>高级>环境变量。
  3. 在“用户或系统”条目中,搜索名为PATH的变量。双击它,最后插入“;” 以及BAT的路径(例如“ c:\ apps \” =>“ previous_string; c:\ apps \”),然后单击确定和确定。
  4. 因此,当您使用cmd(或BAT文件)时,只需将BAT的名称放在创建的路径(例如“ c:\ apps”)中即可运行命令(例如,键入“ myapps”即可运行这些替换命令)。

1
我尝试了“开始/分离”,但它仅保存环境变量(而不是doskey命令的替代项)...“设置”命令仅对打开的提示符有效,但是我们可以使用“ setx”将其保存到系统或“永远”的用户环境变量。我不知道是否有办法“永久”将doskey替代保存到系统或每次Windows启动中。我确实喜欢用我的方式...
kokbira 2011年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.