首页 > 解决方案 > 使批处理 FOR /F 忽略注册表自动运行

问题描述

我最近决定稍微升级一下我的 cmd 游戏,发现我可以使用 AutoRun 注册表项 ( HKLM\Software\Microsoft\Command Processor\AutoRun) 注册宏并做其他有趣的事情。

因为我厌倦了不断地为 git 查找我的 SSH 密钥,或者start-ssh-agent我现在想在 cmd 启动时立即运行它,因此(至少是计划)提示我一次输入我的 ssh 密钥密码,然后让它连接到我打开的每个后续命令行上正在运行的 ssh-agent。

但是我遇到了一个问题!start-ssh-agent(由 git for windows 提供)FOR /F利用tasklist /FI "Imagename eq ssh-agent.exe". 来自Windows Server Docs on For(强调我的):

您可以使用 for /f 命令通过在括号之间放置反引号来解析命令的输出。它被视为命令行,传递给子 Cmd.exe。输出被捕获到内存中并像文件一样被解析。

但是,该子 cmd.exe 未通过/D,因此为了评估 tasklist 命令,打开了一个新 cmd,它运行 start-ssh-agent 来评估 tasklist 命令,因此它创建了一个新 cmd;你知道这是怎么回事。

说了很多,所以这里有一个问题:我有什么办法可以解决这个问题,而不是通过禁用 AutoRun 来处理正在运行的任何内容for /f或任何其他措施来无休止地创建新的命令行?

标签: batch-filecmd

解决方案


根据StephanaschipflMofi以及我的同事的建议,我改变了方法并切换到Cmder作为我的首选终端,它具有方便的环境设置,允许在启动时运行 start-ssh-agent。

我将我所有的 doskey“别名”移到cmder\config\user_aliases.cmd并取消注释call "%GIT_INSTALL_ROOT%/cmd/start-ssh-agent.cmd" /k exit.cmder\config\user_profile.cmd


推荐阅读