Batch file 为/F生成批忽略注册表自动运行

Batch file 为/F生成批忽略注册表自动运行,batch-file,cmd,Batch File,Cmd,我最近决定升级一下我的cmd游戏,发现我可以使用自动运行注册表键(HKLM\Software\Microsoft\Command Processor\AutoRun)注册宏和做其他有趣的事情 因为我已经厌倦了不断地查找我的SSH密钥来查找git或者执行启动SSH代理,所以我现在想在cmd启动时立即运行它,这样(至少计划是这样的)会提示我输入一次SSH密钥密码,然后让它在我打开的每个后续命令行上连接到正在运行的SSH代理 然而,我遇到了一个问题start ssh-agent(由git for wi

我最近决定升级一下我的cmd游戏,发现我可以使用自动运行注册表键(
HKLM\Software\Microsoft\Command Processor\AutoRun
)注册宏和做其他有趣的事情

因为我已经厌倦了不断地查找我的SSH密钥来查找git或者执行
启动SSH代理
,所以我现在想在cmd启动时立即运行它,这样(至少计划是这样的)会提示我输入一次SSH密钥密码,然后让它在我打开的每个后续命令行上连接到正在运行的SSH代理

然而,我遇到了一个问题
start ssh-agent
(由git for windows提供)通过运行
tasklist/FI“Imagename eq ssh-agent.exe”
来使用
for/F
,以收集有关可能正在运行的ssh-agent的信息。来自(我的):

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

未传递该子cmd.exe
/D
,但是为了评估tasklist命令,打开了一个新的cmd,该cmd运行start ssh代理,该代理希望评估tasklist命令,以便创建一个新的cmd;你知道这是怎么回事


很多人都这么说,问题来了:我有没有办法解决这个问题,而不是通过禁用AutoRun来创建新的命令行,无论是在
for/f
中运行的命令行还是任何其他措施?

按照我的同事和的建议,我改变了方法,改为使用我的首选终端,该终端具有方便的环境设置,允许在启动时按预期运行start ssh agent


我将我所有的doskey“别名”移到
cmder\config\user\u aliases.cmd
,并根据我的同事和我的建议,取消了
调用“%GIT\u INSTALL\u ROOT%/cmd/start ssh agent.cmd”/k exit
行的注释,我改变了方法,改为使用我的首选终端,该终端具有方便的环境设置,允许在启动时按预期运行start ssh agent


我将我所有的doskey“别名”移到
cmder\config\user\u aliases.cmd
并取消注释了
调用“%GIT\u INSTALL\u ROOT%/cmd/start ssh agent.cmd”/k退出
中的
cmder\config\user\u profile.cmd

错误方法:不要使用所需的工具集启动
cmd
的每个实例。相反,创建一个destop图标来启动一个批处理文件,该批处理文件将进行修改(仅适用于此实例)。不幸的是,
for/F
使用
cmd/C
来启动子命令,而管道(
)则使用
cmd/S/D/C
,用于任一侧,而且
/D
会禁用这种自动启动功能…成千上万的应用程序,包括
cmd.exe
和Windows shell在后台运行
cmd.exe
。使用注册表值
AutoRun
注册的命令行在启动时总是由
cmd.exe
执行,而与运行
cmd.exe
的进程无关。因此,你使用了完全错误的方法。我建议像Stephan一样创建一个快捷方式文件(.lnk文件)打开命令提示符窗口并执行命令行或批处理文件,以设置手动使用Windows命令提示符时所需的环境。关于的回答详细说明了如何通过运行批处理文件启动
cmd.exe
,以设置特定环境并保持运行以手动执行命令。在打开的命令提示符窗口中也运行
cmd/?
,并在输出帮助中阅读Windows命令处理器如何解释选项
/C
/K
后的命令行。也许可以只使用命令行而不是整个批处理文件来运行
%SystemRoot%\System32\cmd.exe/K
,并使用快捷方式来设置所需的环境。错误的方法:不要使用所需的工具集启动
cmd
的每个实例。相反,创建一个destop图标来启动一个批处理文件,该批处理文件将进行修改(仅适用于此实例)。不幸的是,
for/F
使用
cmd/C
来启动子命令,而管道(
)则使用
cmd/S/D/C
,用于任一侧,而且
/D
会禁用这种自动启动功能…成千上万的应用程序,包括
cmd.exe
和Windows shell在后台运行
cmd.exe
。使用注册表值
AutoRun
注册的命令行在启动时总是由
cmd.exe
执行,而与运行
cmd.exe
的进程无关。因此,你使用了完全错误的方法。我建议像Stephan一样创建一个快捷方式文件(.lnk文件)打开命令提示符窗口并执行命令行或批处理文件,以设置手动使用Windows命令提示符时所需的环境。关于的回答详细说明了如何通过运行批处理文件启动
cmd.exe
,以设置特定环境并保持运行以手动执行命令。在打开的命令提示符窗口中也运行
cmd/?
,并在输出帮助中阅读Windows命令处理器如何解释选项
/C
/K
后的命令行。也许可以只使用命令行而不是整个批处理文件来运行
%SystemRoot%\System32\cmd.exe/K
,并使用快捷方式来设置所需的环境。