我正在尝试从SQL Server代理任务执行最基本的复制项目,但是当我使用格式为$($var)
的子表达式语句时,由于$()
,它会崩溃句法。
更多信息,在这里:
https://dba.stackexchange.com/questions/58669/sql-agent-powershell-step-syntax-error
我一点都不了解PowerShell,但我从Googling那里得到了这一点:
$Datetime = get-date -format "yyyy-MM-dd HHmmss"
Copy-Item -Path "F:\Grange\PROD\Gwineupd.csv" -Destination "F:\Grange\PROD\Archive\Gwineupd $($Datetime).csv"
我需要将$($ Datetime)替换为不使用该格式的内容... 有可能吗?
答案 0 :(得分:1)
尝试预先构建文件名,就像这样:
$Datetime = get-date -format "yyyy-MM-dd HHmmss"
$destination = "F:\Grange\PROD\Archive\Gwineupd{0}.csv" -f $Datetime
Copy-Item -Path "F:\Grange\PROD\Gwineupd.csv" -Destination $destination
答案 1 :(得分:0)
我认为您不需要$()
语法:
Copy-Item -Path "F:\Grange\PROD\Gwineupd.csv" -Destination "F:\Grange\PROD\Archive\Gwineupd $Datetime.csv"
在Powershell中,双引号字符串中的变量会自动替换。
答案 2 :(得分:0)
您始终可以用{}
来限定变量名,而无需在字符串中使用$()
:
"F:\Grange\PROD\Archive\Gwineupd ${Datetime}.csv"
答案 3 :(得分:0)
只是另一种选择,
直接使用-Format
运算符通过管道传递源代码并从源代码部分构建目标名称。
Get-Item "F:\Grange\PROD\Gwineupd.csv" |
Copy-Item -Destination {"{0}\Archive\{1}_{2:yyyy-MM-dd HHmmss}{3}" -f `
$_.Directory, $_.BaseName, (Get-Date), $_.Extension}