You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell传递日期变量给Get-Content报错:找不到匹配的位置参数

解决PowerShell中文件名拼接传递给Get-Content的错误问题

错误原因

你的代码采用单引号包裹路径并搭配+拼接变量的方式不符合PowerShell语法规则:单引号字符串不会解析内部变量,且这种拼接方式会将命令拆分为多个参数,导致Get-Content把+20220923+识别为额外的位置参数,从而触发报错。

正确写法

方法1:双引号嵌入变量(最简洁)

PowerShell中双引号会自动解析内部变量,直接将$Today嵌入路径字符串即可:

$Today = Get-Date -Format "yyyyMMdd"
Get-Content "D:\Folder_1\Test_file.$Today.csv" | Set-Content -Encoding UTF8 "D:\Folder_2\Test_file.$Today.csv"

注意:原代码使用-Encoding Ascii不符合转UTF8的需求,需改为-Encoding UTF8。PowerShell 5.1中该参数默认生成带BOM的UTF8,若需无BOM格式可参考方法3。

方法2:先拼接为变量再传递

将路径拼接成独立变量后再传给命令,逻辑更清晰:

$Today = Get-Date -Format "yyyyMMdd"
$sourcePath = 'D:\Folder_1\Test_file.' + $Today + '.csv'
$targetPath = 'D:\Folder_2\Test_file.' + $Today + '.csv'
Get-Content $sourcePath | Set-Content -Encoding UTF8 $targetPath

方法3:格式字符串(适合复杂路径)

用-f运算符格式化字符串,适配多变量组合场景:

$Today = Get-Date -Format "yyyyMMdd"
$sourcePath = 'D:\Folder_1\Test_file.{0}.csv' -f $Today
$targetPath = 'D:\Folder_2\Test_file.{0}.csv' -f $Today
Get-Content $sourcePath | Set-Content -Encoding UTF8 $targetPath

无BOM UTF8输出补充(PowerShell 5.1)

PowerShell 5.1中Set-Content -Encoding UTF8默认生成带BOM的文件,若需无BOM格式,可使用.NET类方法:

$Today = Get-Date -Format "yyyyMMdd"
$sourcePath = "D:\Folder_1\Test_file.$Today.csv"
$targetPath = "D:\Folder_2\Test_file.$Today.csv"
$content = Get-Content $sourcePath -Raw
[System.IO.File]::WriteAllLines($targetPath, $content, [System.Text.Encoding]::UTF8)

PowerShell 7+版本中,Set-Content -Encoding UTF8默认即为无BOM格式,无需额外处理。

内容的提问来源于stack exchange,提问作者Sebax Londoño

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 18:05:34