使用$($ var)语法将变量追加到字符串而无需使用

时间:2019-03-05 09:37:24

标签: powershell

我正在尝试从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)替换为不使用该格式的内容... 有可能吗?

4 个答案:

答案 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}