在终端中原始命令如下:
在执行任务: powershell -Command '& "C:\Program Files (x86)\NASM\nasm.exe"' -ArgumentList "-f win32 C:\Users\15879\Desktop\code\x86\Hello World.asm -o C:\Users\15879\Desktop\code\x86\Hello World.obj" -NoNewWindow -Wait
x86 : 无法将“x86”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。
所在位置 行:1 字符: 21
+ & C:\Program Files (x86)\NASM\nasm.exe -ArgumentList -f win32 C:\User ...
+ ~~~
+ CategoryInfo : ObjectNotFound: (x86:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
在命令行中,如果路径包含空格,应该将整个路径放在双引号 " "
内。否则,PowerShell 会错误地将路径中的空格视为命令分隔符,从而将路径拆分成多个部分。
当使用 PowerShell 的 &
运算符来调用一个外部程序时,PowerShell 会直接执行命令,但是如果后面接的参数没有正确分隔和包围,PowerShell 会出现解析错误。
网上很多都说需要添加双引号包含空格,我修改了task.json文件:
{
"label": "build with NASM",
"type": "shell",
"command": "powershell",
"args": [
"-Command",
"& \"C:\\Program Files (x86)\\NASM\\nasm.exe\"",
"-f", "win32",
"\"${file}\"",
"-o", "\"${fileDirname}\\${fileBasenameNoExtension}.obj\"",
"-NoNewWindow",
"-Wait"
],
"group": {
"kind": "build",
"isDefault": false
},
"problemMatcher": [],
"detail": "使用NASM编译汇编代码"
}
即使添加了双引号依然不行,vscode依然会解析出错,就是依然会因为空格导致解析错误。
下面我采用短路径的方法来避免空格的问题。
{
"label": "build with NASM",
"type": "shell",
"command": "powershell",
"args": [
"-Command",
"& \"C:\\Progra~2\\NASM\\nasm.exe\" -f bin \"${file}\" -o \"${fileDirname}\\${fileBasenameNoExtension}.bin\""
],
"group": {
"kind": "build",
"isDefault": false
},
"problemMatcher": [],
"detail": "使用NASM编译汇编代码"
}
Windows 为长路径提供了短路径(8.3 格式),它避免了空格和其他特殊字符的问题。例如,C:\Program Files (x86)
的短路径通常是 C:\Progra~2
。
短路径格式不包含空格,因此它能够避免 PowerShell 将路径拆分成多个部分的问题。
这样我们相当于消除了空格的问题,避免了命令解析错误。
最后结果如下,证明vscode执行成功了该命令:
* 正在执行任务: powershell -Command '& "C:\Progra~2\NASM\nasm.exe" -f bin "C:\Users\15879\Desktop\code\x86\HelloWorld.asm" -o "C:\Users\15879\Desktop\code\x86\HelloWorld.bin"'
* 终端将被任务重用,按任意键关闭。