在工作中,有一项企业安全策略,其中所有可执行文件仅允许用完C:\Program Files
或C:\Program Files (x86)
。
在Visual Studio代码的settings.json
中,使用以下设置:
{
"terminal.integrated.shell.windows": "C:\\Windows\\Sysnative\\cmd.exe",
"terminal.integrated.shellArgs.windows": [
"/k C:\\Program Files (x86)\\Cmder\\vendor\\init.bat"
]
}
...关于集成终端的初始化,我收到以下错误消息:
'C:\Program' is not recognized as an internal or external command,
operable program or batch file.
因为Windows'令人敬畏的文件/目录命名约定允许空格,很难指向其中一条Program File
路径。
VSCode在你转义空格字符时并不喜欢它,这段代码给了我错误Invalid escape character in string
。当我尝试将属性更改为:
{
...
"terminal.integrated.shellArgs.windows": [
"/k C:\\Program\ Files\ (x86)\\Cmder\\vendor\\init.bat"
]
}
...我收到以下错误消息:
'C:\ProgramFiles' is not recognized as an internal or external command,
operable program or batch file.
最后,尝试用这样的引号包围路径:
{
...
"terminal.integrated.shellArgs.windows": [
"/k \"C:\\Program Files (x86)\\Cmder\\vendor\\init.bat\""
]
}
...给我这个错误信息:
'\"C:\Program Files (x86)\Cmder\vendor\init.bat\""' is not recognized as an
internal or external command,
operable program or batch file.
有没有办法将Cmder集成到VSCode中?
答案 0 :(得分:24)
在网上搜索答案之后,我找不到解决方案,但我想出来并认为我可以在这里发帖给别人看,因为我已经看到来自不同论坛的人有同样的问题,但没有答案。
在Windows中,/X
命令有一个dir
,其中指出:
/X This displays the short names generated for non-8dot3 file
names. The format is that of /N with the short name inserted
before the long name. If no short name is present, blanks are
displayed in its place.
因此,在dir /X
上执行C:\
命令会显示以下内容:
C:\>dir /X
Volume in drive C is OSDisk
Volume Serial Number is XXXX-XXXX
Directory of C:\
...
08/17/2017 08:02 PM <DIR> PROGRA~1 Program Files
08/09/2017 03:58 PM <DIR> PROGRA~2 Program Files (x86)
...
您可以使用目录短名称PROGRA~2
替换Program Files (x86)
,并在settings.json
中为VS代码进行以下设置:
{
"terminal.integrated.shell.windows": "C:\\Windows\\Sysnative\\cmd.exe",
"terminal.integrated.shellArgs.windows": [
"/k C:\\PROGRA~2\\Cmder\\vendor\\init.bat"
]
}
在集成终端中成功加载Cmder:
答案 1 :(得分:6)
另一个解决方案是您可以将cmder位置设置为新路径
并在您的settings.json中设置
<menu class="vertical-mini"><ul class="vertical-menu">...
找到它
答案 2 :(得分:5)
Cmder团队建议在路径中的每个空格之前加一个^
字符,而不要使用8dot3命名方法。
示例:
{
"terminal.integrated.shell.windows": "C:\\Windows\\Sysnative\\cmd.exe",
"terminal.integrated.shellArgs.windows": [
"/k C:\\Program Files^ (x86)\\Cmder\\vendor\\init.bat"
]
}
路径中的空格
⚠注意:Windows中的命令行解释器在路径中的空格中存在一些问题,例如
C:\Program Files (x86)\Cmder
。我们不建议在包含空格的路径中安装Cmder。相反,我们建议在不包含任何空格的路径中安装Cmder,例如:
C:\apps\Cmder
或C:\tools\Cmder
,以避免与VS Code发生冲突。如果您出于某种原因确实需要从带有空格的路径中启动Cmder,则可能需要在每个空格之前添加一个
^
符号,以使C:\\Example Directory for Test\\Cmder
变为C:\\Example^ Directory^ for^ Test\\Cmder
您的settings.json
文件。
答案 3 :(得分:2)
这是实现“2021”的新方法
与this article有关
第 1 步:Download Cmder。
第 2 步:将 Cmder 保存到 C:\ 驱动器
第 3 步:在 VSCode 中打开 Settings.json(文件 - 首选项 - 设置...)
第 4 步:输入此参数:
"terminal.integrated.profiles.windows": {
"Cmder": {
"path": "${env:windir}\\System32\\cmd.exe",
"args": ["/k", "C:\\cmder\\vendor\\bin\\vscode_init.cmd"]
}
},
"terminal.integrated.defaultProfile.windows": "Cmder",
答案 4 :(得分:1)
这对我有用。我的Cmder根目录:D:\soft\cmder
,关注你的!
"terminal.integrated.env.windows": {"CMDER_ROOT": "D:\\soft\\cmder"},
"terminal.integrated.shellArgs.windows": ["/k D:\\soft\\cmder\\vendor\\init.bat"],
在VSCode设置中添加它。享受它!
答案 5 :(得分:0)
https://github.com/cmderdev/cmder/wiki/Seamless-VS-Code-Integration
"terminal.integrated.shell.windows": "cmd.exe",
"terminal.integrated.env.windows": {
"CMDER_ROOT": "[cmder_root]"
},
"terminal.integrated.shellArgs.windows": [
"/k [cmder_root]\\vendor\\init.bat"
],
用您的Cmder安装目录替换[cmder_root]。
第二个解决方案
"terminal.integrated.shell.windows": "C:\\Program Files\\cmder\\vendor\\git-for-windows\\bin\\bash.exe",
答案 6 :(得分:0)
一个非常简单的解决方案(source):
使用以下代码在cmder文件夹vscode.bat
的根目录中创建一个文件。
@echo off
SET CMDER_ROOT=C:\cmder <--your path to cmder
"%CMDER_ROOT%\vendor\init.bat"
然后在您的vscode设置中将以下内容添加到您的settings.json
中:
"terminal.integrated.shell.windows": "C:\\WINDOWS\\sysnative\\cmd.exe",
"terminal.integrated.shellArgs.windows": ["/K", "C:\\cmder\\vscode.bat"] <-- your path
您还可以通过注释cmd
和注释cmder
来轻松在"terminal.integrated.shellArgs.windows"
和scp
之间切换。
答案 7 :(得分:0)
我发现的最佳解决方案: 快速简便。
"terminal.external.windowsExec": "C:\\Utils\\Cmder\\Cmder.exe",
"terminal.integrated.shell.windows": "C:\\WINDOWS\\sysnative\\cmd.exe"
"terminal.integrated.shellArgs.windows" : ["/K","C:\\Utils\\cmder\\vendor\\init.bat"],
答案 8 :(得分:0)
此解决方案在开放终端上效果很好,但会中断通过插件启动的cmd调用,这些插件带有npm build-lint等参数。
解决此问题的一种方法是创建一个自定义的init.bat,包装这些调用并将其引用在sellArgs上。
settings.json
"terminal.integrated.shell.windows": "cmd.exe",
"terminal.integrated.shellArgs.windows": [
"/K C:\\SoftDev\\App\\Cmder\\vendor\\vstudio.bat"
],
C:\ SoftDev \ App \ cmder \ vendor \ vstudio.bat
@echo off
if "%1" == "" (
C:\SoftDev\App\cmder\vendor\init.bat
) else (
cmd %1 %2 %3 %4 %5 %6 %7 %8 %9
exit
)
答案 9 :(得分:0)
@Ari Maulana的魅力就像......
在变量上添加“ CMDER_ROOT”,然后在settings.json中设置
"terminal.integrated.shell.windows": "C:\\Windows\\system32\\cmd.exe",
"terminal.integrated.shellArgs.windows": [
"/k %CMDER_ROOT%\\vendor\\init.bat"
]
答案 10 :(得分:0)
有两个扩展将Cmder包含在VS Code中,但是无论如何它们都不能在Win 7中使用(我知道它已经很老了),而这里的一些答案却不适用于我的情况。
位置详细信息:
cmd.exe = C:\Windows\System32\cmd.exe
I am using a portable version of Cmder in C:\cmder\Cmder.exe
init.bat = C:\cmder\vendor\init.bat
setting.json = C:\Users\Admin\AppData\Roaming\Code\User\settings.json
这是我的settings.json
{
"window.zoomLevel": 0,
"terminal.integrated.shell.windows": "C:\\Windows\\System32\\cmd.exe",
"terminal.integrated.shellArgs.windows": [
"/k C:\\cmder\\vendor\\init.bat"
]
}
屏幕截图可以正常使用
注意:我不需要将Cmder添加到环境路径
答案 11 :(得分:-1)
Windows中的命令行解释器在路径中存在一些空格问题,例如C:\ Program Files \ Cmder或C:\ Program Files(x86)\ Cmder。而是创建一个新文件夹,例如“ apps”,并且使用路径没有空格,例如c:\ apps