在Windows Powershell的VS Code终端中编译时遇到问题

时间:2019-06-07 05:14:35

标签: c++ powershell visual-studio-code g++

右键单击“运行代码”,并在用户设置的终端上运行时,出现这些错误。

At line:1 char:63
+ ... "c:\Users\Josh\Documents\Programming\Learning to Program\" && g++ Exe ...
+                                                                ~~
The token '&&' is not a valid statement separator in this version.
At line:1 char:99
+ ... \Learning to Program\" && g++ Exercise36.cpp -o Exercise36 && "c:\Use ...
+                                                                ~~
The token '&&' is not a valid statement separator in this version.
At line:1 char:102
+ ... ercise36 && "c:\Users\Josh\Documents\Programming\Learning to Program\ ...
+                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Expressions are only allowed as the first element of a pipeline.
At line:1 char:160
+ ...  "c:\Users\Josh\Documents\Programming\Learning to Program\"Exercise36
+                                                                ~~~~~~~~~~
Unexpected token 'Exercise36' in expression or statement.
    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : InvalidEndOfLine

直到今天,我一直在编译,并且做了一些谷歌搜索,并开始在终端中键入自己的命令,而不仅仅是运行代码。

我开始用&&替换-and,并遇到了另一个问题。这就是现在的命令。

"c:\Users\Josh\Documents\Programming\Learning to Program\" -and g++ Exercise36.cpp -o Exercise36 -and "c:\Users\Josh\Documents\Programming\Learning to Program\"Exercise36

这是我得到的错误。

Set-Location : Parameter cannot be processed because the parameter name 'o' is ambiguous. Possible matches include: -OutVariable -OutBuffer.
At line:1 char:87
+ ... \Programming\Learning to Program\" -and g++ Exercise36.cpp -o Exercis ...
+                                                                ~~
    + CategoryInfo          : InvalidArgument: (:) [Set-Location], ParameterBindingException
    + FullyQualifiedErrorId : AmbiguousParameter,Microsoft.PowerShell.Commands.SetLocationCommand

我正在使用GNU开源编译器,这是我遇到的第一个问题,因为我意识到在编译之前必须先保存。我正在运行一个简单的字符串,该字符串将从C ++ Primer程序从终端读取的字符串将所有字符更改为X。任何帮助将不胜感激。

7 个答案:

答案 0 :(得分:2)

好的,问题在于VS Code的默认终端为 Windows Powershell 因此,您必须将默认终端更改为命令提示符

  1. 单击 Dropdown (下拉),其中显示 Powershell 以及新终端的 + 符号
  2. 点击选择默认终端
  3. 您将看到可供选择的选项,选择命令提示符

然后这些命令将是可执行的

答案 1 :(得分:1)

我遇到了同样的问题,我相信这是由新的VS代码1.35版本引起的。 我尝试降级到1.34,然后重新编译并运行c ++。

旧版本似乎使用不同的命令运行代码:

  

“ cd $ dir; if($?){g ++ $ fileName -o $ fileNameWithoutExt}; if($?){。\\ $ fileNameWithoutExt}”

在您的情况下,它看起来像:

  

cd“ c:\ Users \ Josh \ Documents \ Programming \ Learning to Program \”;如果($?){g ++ Exercise36.cpp -o Exercise36};如果($?){。\ Exercise36}

对我来说,使用此命令也可以在新的VS版本中编译和运行作品。

答案 2 :(得分:1)

代替 && 使用 |它适用于任何语言

答案 3 :(得分:0)

只猜测您可能需要什么:

# change to the directory, where your source code resides
Set-Location "c:\Users\Josh\Documents\Programming\Learning to Program\" 

# Invoke compiler via the call operator = &
& g++ Exercise36.cpp -o Exercise36 

# change to the directory, where your binary resides
Set-Location "c:\Users\Josh\Documents\Programming\Learning to Program\Exercise36"

如果用;将它们分开,则可以执行以下三个命令:

   Set-Location "c:\Users\Josh\Documents\Programming\Learning to Program\"; & g++ Exercise36.cpp -o Exercise36; Set-Location "c:\Users\Josh\Documents\Programming\Learning to Program\Exercise36"

如果要检查命令的结果,可以使用$? variable

答案 4 :(得分:0)

按照this article的步骤进行操作,当我尝试在VS代码版本1.39.2的终端中运行以下命令时,遇到了此问题

npm run build && npm run start-sw

错误

At line:1 char:15
+ npm run build && npm run start-sw
+               ~~
The token '&&' is not a valid statement separator in this version.
    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : InvalidEndOfLine

分辨率是要在Node JS命令窗口中运行同一命令;

在此处添加此内容是因为它是关于stackOverflow上该错误的最高帖子,可能会在将来对某人有所帮助

答案 5 :(得分:0)

我遇到了同样的问题

PS:

C:\typescript_practice> tsc testclass.ts && node testclass.js
  

在线:1个字符:18个   tsc testclass.ts &&节点testclass.js                     ~~   在此版本中,标记“ &&”不是有效的语句分隔符。       + CategoryInfo:ParserError:(:) [],ParentContainsErrorRecordException       + FullyQualifiedErrorId:InvalidEndOfLine

     

PS C:\ typescript_practice> tsc testclass.ts |节点testclass.js   桑伽美什·瓦斯特拉德(Sangamesh Vastrad)

与以下人员合作

使用|“代替最新的&&

答案 6 :(得分:0)

使用最新更新的VScode终端也遇到了同样的问题, 与CMD进行了相同的尝试,效果很好。 因此,尝试在其他Shell或cmd而不是VSCode终端中运行命令。