为何批处理启动的Chrome双窗口参数失效?如何让窗口独立遵循开关
为什么你的Chrome批处理会打开两个一模一样的窗口?
问题根源
Chrome采用的是单主进程+多渲染进程的架构,当你几乎同时执行两个start chrome命令时,第一个命令会拉起Chrome的主进程,而第二个命令检测到已有主进程运行后,哪怕你加了--new-window,它的窗口位置、大小参数也会被主进程直接忽略——因为主进程已经完成初始化,只会默认打开一个新窗口,不会重新解析你传入的参数。
说白了就是两个命令触发得太密集,第二个命令的参数没来得及被Chrome正确处理,直接“复用”了第一个窗口的配置。
两种可行的解决办法
办法1:给第二个命令加个延迟
通过timeout命令让第二个启动命令晚几秒执行,给Chrome主进程足够时间处理第一个窗口的参数,这样第二个参数就能生效:
start chrome --window-position=100,100 --window-size=100,100 --new-window "http://example.com" timeout /t 2 /nobreak > nul start chrome --window-position=200,200 --window-size=200,200 --new-window "http://example.com"
/t 2是延迟2秒,你可以根据自己的机器速度调整,1-3秒基本够用。/nobreak防止用户按任意键跳过延迟,> nul是把延迟的提示信息藏起来,让批处理运行更干净。
办法2:给每个窗口分配独立的用户数据目录
Chrome会把不同用户数据目录的实例当成完全独立的进程,这样每个启动参数都会被严格执行,不需要等延迟:
start chrome --window-position=100,100 --window-size=100,100 --user-data-dir="%temp%\chrome_win1" --new-window "http://example.com" start chrome --window-position=200,200 --window-size=200,200 --user-data-dir="%temp%\chrome_win2" --new-window "http://example.com"
%temp%\chrome_win1和%temp%\chrome_win2是临时目录,关闭Chrome后可以手动删掉,也可以在批处理最后加一行rmdir /s /q "%temp%\chrome_win1" "%temp%\chrome_win2"自动清理。- 这个办法的优点是不用等延迟,两个窗口几乎同时打开且参数完全生效;缺点是每个窗口是独立的Chrome实例,书签、扩展这些数据不会共享(如果不需要共享的话,这根本不是问题)。
小提示
如果你用的是新版Chrome,其实--new-window和--user-data-dir配合时,不加--new-window也会开新窗口,不过加上也没啥影响。另外,尽量别在极短时间内连续触发多个Chrome启动命令,很容易触发它的参数复用逻辑。
内容的提问来源于stack exchange,提问作者pina-colada
相关产品推荐
相关产品推荐

