0

在我继续之前,我对 Powershell 的体验只有 2 天。

我正在尝试从命令行调用 powershell 脚本,并在命令中添加了四个参数。powershell 脚本只是清理一个 CSV 文件,并在清理的每个阶段制作该文件的副本。

脚本中的变量abcd新文件名(包括完整地址)相关。

PowerShell 脚本

param(
  [string]$a,
  [string]$b,
  [string]$c,
  [string]$d


 )



Get-Content $a | ForEach-Object { $_ -replace """""""""""","""""" } | Set-Content $b -Force
Get-Content $b | ForEach-Object { $_ -replace """""""","""" } | Set-Content $c -Force
Get-Content $c | ForEach-Object { $_ -replace """""","" } | Set-Content $d -Force

命令脚本

下面的命令脚本是我试图运行的cmd(注意:我已经取出了真实地址)。

powershell.exe '\\somefileaddress\CleanData.ps1' 
-a "\\someaddress\DrFA-C.csv" 
-b "\\someaddress\DrFA-C_2.csv" 
-c "\\someaddress\DrFA-C_3.csv"
-d "\\someaddress\DrFA-C_4.csv"

我收到的错误消息是:

您必须在“-”运算符的右侧提供一个值表达式。

4

3 回答 3

2

我相当确定问题不在于您的脚本,而在于您如何调用它。这对我有用(没有为清楚起见插入的换行符):

powershell.exe -Command "& '\\somefileaddress\CleanData.ps1' 
-a '\\someaddress\DrFA-C.csv' 
-b '\\someaddress\DrFA-C_2.csv' 
-c '\\someaddress\DrFA-C_3.csv' 
-d '\\someaddress\DrFA-C_4.csv'"
于 2013-04-22T15:08:39.030 回答
1

您正在使用双引号,这使其成为可扩展的字符串(解析器将在字符串中查找 Powershell 运算符,并尝试在解析期间调用这些运算符)。- 是一个 Powershell 运算符,因此它认为您正在尝试进行某种减法运算。

切换到单引号来告诉它您希望该字符串按字面意思解释。

于 2013-04-22T14:45:13.823 回答
1

听起来这个答案并没有专门解决这个问题,但以防万一有一天它对某人有所帮助:

在安装了 PowerShell v2(Windows 7 的默认版本)的 Windows 7 计算机上运行为 PowerShell v5 编写的脚本时,我收到此错误消息。这是一个非常复杂的行,它的编写方式与旧版本的 PowerShell 不兼容。

在 PowerShell 中运行此代码:$PSVersionTable.PSVersion.Major如果它返回2(或者甚至可能3?),您可以尝试通过安装此 Windows 更新来升级您的 PowerShell 版本。

于 2017-08-24T17:27:37.347 回答