将shell函数移植到cmd.exe:是否可以在启动时自动源脚本?

blo*_*kie 3 linux windows bash shell cmd

我正在移植一个Linux工具集,它经常使用shell函数来提供某些功能.这些函数在您启动新shell时会自动获取,并包含更改工作目录等内容,这对于独立程序来说几乎是不可能的,因为子进程无法更改其父级环境.

例如,有一个函数cdbm可以将工作目录更改为先前已添加书签的目录.现在我想在Windows上做同样的事情,但我坚持不懈cmd.exe.据我所知,脚本可以移植到jscript,vbscript或普通批处理,这应该不是问题.但是,我如何确保它们在启动时自动获取并生活在shell的环境中?

Pau*_*ce. 8

根据help cmd:

If /D was NOT specified on the command line, then when CMD.EXE starts, it
looks for the following REG_SZ/REG_EXPAND_SZ registry variables, and if
either or both are present, they are executed first.

    HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\AutoRun

        and/or

    HKEY_CURRENT_USER\Software\Microsoft\Command Processor\AutoRun

作为测试,regedit我在上面显示的HLM分支中创建了一个名为"AutoRun"的新密钥,其字符串值为"echo Hi".当我开始一个新的实例时,cmd我得到了:

Microsoft Windows [Version 6.0.6000]
Copyright (c) 2006 Microsoft Corporation.  All rights reserved.
Hi

C:\Users\Username>

您可以输入要运行的脚本的名称(我会在脚本中放入一个完全指定的路径,或者在其中添加一个环境变量,例如"%HOMEPATH%\ scripts\scriptname"(如果有的话,包括引号)名称中的空格).

编辑: 注册表项有一些副作用.一个例子是help.如果我有echo上面的命令,例如,在我输入的AutoRun中,我help vol在帮助文本上方得到一个"Hi".这样做vol /?,虽然没有做到这一点.