PowerShell - 连接两个带有下划线的字符串不起作用?
PowerShell - Concatenating two strings with underscore inbetween not working?
我正在尝试将时间戳附加到文件名,然后将该文件移动到另一个目录。
这是一个代码示例:
$sourceFiles= Get-ChildItem $sourcePath\* -Include *.csv
ForEach($sourceFile in $sourceFiles)
{
$fileNameWithoutExtension = $sourceFile.BaseName
$timestamp = $(Get-Date -f yyyy-MM-dd_HH-mm_ss)
$processedFile = Join-Path -Path $processedPath -ChildPath "$fileNameWithoutExtension_$timestamp.csv"
Move-Item -Path $sourceFile -Destination $processedFile
}
当我执行此命令时,似乎 "$fileNameWithoutExtension_$timestamp.csv"
完全忽略了 $fileNameWithoutExtension
变量的内容,只将时间戳包含在文件名中。我也已经对此进行了调试并检查了 $fileNameWithoutExtension
变量的内容,它确实包含没有扩展名的正确文件名。为什么会这样?如何正确创建文件名?
这是因为下划线是变量名中的有效字符(看here),所以PowerShell基本上是连接$fileNameWithoutExtension_
+ $timestamp
+ .csv
。第一个变量(名称包括下划线)不存在,因此它被解释为 null / empty。
尝试以下解决方案之一(当然还有更多):
# curly-bracket-notation for variables
"${fileNameWithoutExtension}_${timestamp}.csv"
# sub-expression operator
"$($fileNameWithoutExtension)_$($timestamp).csv"
# escape character
"$fileNameWithoutExtension`_$timestamp.csv"
# format operator
"{0}_{1}.csv" -f $fileNameWithoutExtension, $timestamp
# string concetenation
($fileNameWithoutExtension + "_" + $timestamp + ".csv")
我正在尝试将时间戳附加到文件名,然后将该文件移动到另一个目录。 这是一个代码示例:
$sourceFiles= Get-ChildItem $sourcePath\* -Include *.csv
ForEach($sourceFile in $sourceFiles)
{
$fileNameWithoutExtension = $sourceFile.BaseName
$timestamp = $(Get-Date -f yyyy-MM-dd_HH-mm_ss)
$processedFile = Join-Path -Path $processedPath -ChildPath "$fileNameWithoutExtension_$timestamp.csv"
Move-Item -Path $sourceFile -Destination $processedFile
}
当我执行此命令时,似乎 "$fileNameWithoutExtension_$timestamp.csv"
完全忽略了 $fileNameWithoutExtension
变量的内容,只将时间戳包含在文件名中。我也已经对此进行了调试并检查了 $fileNameWithoutExtension
变量的内容,它确实包含没有扩展名的正确文件名。为什么会这样?如何正确创建文件名?
这是因为下划线是变量名中的有效字符(看here),所以PowerShell基本上是连接$fileNameWithoutExtension_
+ $timestamp
+ .csv
。第一个变量(名称包括下划线)不存在,因此它被解释为 null / empty。
尝试以下解决方案之一(当然还有更多):
# curly-bracket-notation for variables
"${fileNameWithoutExtension}_${timestamp}.csv"
# sub-expression operator
"$($fileNameWithoutExtension)_$($timestamp).csv"
# escape character
"$fileNameWithoutExtension`_$timestamp.csv"
# format operator
"{0}_{1}.csv" -f $fileNameWithoutExtension, $timestamp
# string concetenation
($fileNameWithoutExtension + "_" + $timestamp + ".csv")