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

Windows 将shell函数移植到cmd.exe:是否可以在启动时自动生成脚本的源代码?,windows,linux,bash,shell,cmd,Windows,Linux,Bash,Shell,Cmd,我正在移植一个Linux工具集,它经常使用shell函数来提供某些功能。当您启动一个新shell时,这些函数会自动来源,并包括更改工作目录之类的内容,这对于独立程序来说几乎是不可能的,因为子进程无法更改其父进程的环境 例如,有一个函数cdbm,它将工作目录更改为以前已添加书签的目录。现在我想在Windows上做同样的事情,但我一直坚持使用cmd.exe。据我所知,脚本可以移植到jscript、vbscript或普通批处理,这应该不是问题。但是,我如何确保它们在启动时自动获得资源并生活在shell

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


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

请看

启动
CMD
时,可以将以下注册表项之一设置为批处理文件或其他可执行文件以运行该程序:

HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\AutoRun
HKEY_CURRENT_USER\Software\Microsoft\Command Processor\AutoRun
批处理文件应该能够使用
CD
命令更改正在执行的
CMD
进程的当前目录,因为它不是作为子进程运行的。您可以通过提供
/D
作为切换到
CMD
来禁用自动运行行为


有关详细信息,请参见
CMD/?

根据
帮助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 您可以改为输入要运行的脚本的名称(我将输入脚本的完全指定路径,或者输入包含环境变量的路径,如“%HOMEPATH%\scripts\scriptname”(如果名称中有空格,则包括引号)

编辑:
注册表项有一些副作用。例如
help
。如果我有上面的
echo
命令,例如,在键入
help vol
时的自动运行中,我会得到一个“Hi”就在帮助文本的正上方。执行
vol/?
,但不执行此操作。

由于
cmd
不允许您在全局范围内定义函数,因此我有点不明白您在启动时通过自动寻源脚本试图实现什么。我倾向于在路径中包含一个批处理文件目录,您可以在其中放置bat我经常需要ch文件。

我知道cygwin,但目前还不是一个真正的选项。这些工具已经在那里工作了,但如果可能的话,我想在不需要安装POSIX层的情况下为Windows用户提供相同的功能。虽然此链接可以回答这个问题,但最好包括答案的基本部分此处并提供链接以供参考。如果链接页面发生更改,则只有链接的答案可能会无效。@Rostyslav:答案是看cygwin,链接只是额外的奖励。 Microsoft Windows [Version 6.0.6000] Copyright (c) 2006 Microsoft Corporation. All rights reserved. Hi C:\Users\Username>