在我继续前进之前,我对Powershell的经验只有2天。
我试图从命令行调用powershell脚本,并在命令中添加了四个参数。 powershell脚本只是清理CSV文件,并在清理的每个阶段制作文件的副本。
脚本中的变量a
,b
,c
和d
与新文件名(包括完整地址)相关。
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"
我得到的错误信息是:
您必须在' - '运算符的右侧提供值表达式。
答案 0 :(得分: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'"
答案 1 :(得分:1)
你正在使用双引号,这使它成为一个可扩展的字符串(解析器将在字符串中查找Powershell运算符,并尝试在解析期间调用这些运算符)。 - 是一个Powershell操作符,所以它认为你要做一些减法操作。
切换到单引号,告诉它您希望字面解释该字符串。
答案 2 :(得分:0)
听起来不像这个答案专门解决这个问题,但以防万一有一天它会帮助某人:
运行在安装了PowerShell v2的Windows 7计算机上为PowerShell v5编写的脚本时,出现此错误消息(Windows 7的默认版本)。这是一个非常复杂的系列,它的编写方式与旧版本的PowerShell不兼容。
在PowerShell中运行此代码:$PSVersionTable.PSVersion.Major
如果它返回2
(或者甚至可能3
?),您可以尝试通过安装this窗口来升级您的PowerShell版本更新