【问题标题】:How To Rename File Extension Using Powershell Set-Content如何使用 Powershell Set-Content 重命名文件扩展名
【发布时间】:2015-05-27 13:31:26
【问题描述】:

我有以下 Powershell 代码,我打算在其中扫描文件夹以查找作为 .TXT 文件放入的新文件,将逗号替换为 | (管道符号),从文件中删除双引号并将文件从 .TXT 重命名为 .CSV 并将其保存到输出文件夹。

param($InputDIR,$OutputDIR)

$Dir = get-childitem $InputDIR -Recurse

$CSVList = $Dir | where {$_.Name -like "*.TXT"}
Write-Host -ForegroundColor White -BackgroundColor Blue "Scanning For Input Files In $InputDIR"
Foreach ($csvfile in $CSVList )
{
#ASSIGN THE CSV FILE INTO A VARIABLE.
$CSVFullFileName = $csvfile.FullName
$CSVFileName = $csvfile.Name
$InputFile = (Join-Path $InputDIR $CSVFileName)

Get-Content $InputFile | ForEach-Object { $_ -replace ",", "|" } | ForEach-Object { $_ -replace """", "" } | Set-Content ($InputFile+".csv")

Write-Host -ForegroundColor White -BackgroundColor Blue "Working on $CSVFileName"
Write-Host -ForegroundColor White -BackgroundColor Blue "Object Scan: $_"
#Remove-Item $InputFile
#Rename-Item ($InputFile+".csv") $InputFile

}

我被难住的问题是 Set-Content 输出的文件带有附加到“.TXT”的“.CSV”扩展名,如下所示:“myfile.TXT.CSV”。

我怎样才能做我想做的事,并将新文件输出为没有原始 .TXT 扩展名的 .CSV 扩展名?

【问题讨论】:

  • 您的平均更改扩展名?! ren myfile.txt myfile.txt.csvDir *.txt | rename-item -newname { $_.name -replace '\.txt$','.csv' }
  • 问题是您使用原始名称并将.csv 添加到它的末尾。如果要替换扩展名,则需要先从原始文件名中删除扩展名。
  • Dir *.txt | rename-item -newname { $_.name -replace '\.txt$','.txt.csv' } 然后我将 i .txt 更改为 .txt.csv :-?

标签: powershell csv batch-processing powershell-3.0 file-extension


【解决方案1】:

试试这个:

param($InputDIR,$OutputDIR)

$Dir = get-childitem $InputDIR -Recurse

$CSVList = $Dir | where {$_.Name -like "*.TXT"}
Write-Host -ForegroundColor White -BackgroundColor Blue "Scanning For Input Files In $InputDIR"
Foreach ($csvfile in $CSVList )
{
#ASSIGN THE CSV FILE INTO A VARIABLE.
$CSVFullFileName = $csvfile.FullName
$CSVFileName = $csvfile.Name
$InputFile = (Join-Path $InputDIR $CSVFileName)
$newFileName = "{0}.csv" -f ([io.path]::GetFileNameWithoutExtension($CSVFileName))
$newFilePath = (Join-Path $InputDIR $newFileName)

Get-Content $InputFile | ForEach-Object { $_ -replace ",", "|" } | ForEach-Object { $_ -replace """", "" } | Set-Content $newFilePath

Write-Host -ForegroundColor White -BackgroundColor Blue "Working on $CSVFileName"
Write-Host -ForegroundColor White -BackgroundColor Blue "Object Scan: $_"
#Remove-Item $InputFile
#Rename-Item ($InputFile+".csv") $InputFile

我使用两个步骤确定新文件路径:

  1. 检索不带扩展名的文件名(使用[io.path]::GetFileNameWithoutExtension)并使用格式字符串向其中添加“.csv”
  2. 使用新文件名加入目录

【讨论】:

  • @EtanReisner 这真的帮助了我,通过重新发布我的原始代码它帮助了我更多,因为我知道在我的代码中添加的确切位置。
  • 你可以使用$csvfile.Basename得到与[io.path]::GetFileNameWithoutExtension()相同的值
  • @motionpotion 说“用这个/这些行替换这个/这些行......”也会告诉你他们需要去哪里。但我评论的主旨是,如果没有任何解释(在这种情况下),随机代码块通常没有帮助,这已经得到修复。
  • 由于只处理扩展名为 .txt 的文件,因此可以像这样定义输出文件:$OutputFile = $InputFile -replace '\.txt$', '.csv'
猜你喜欢
  • 2014-05-29
  • 1970-01-01
  • 2019-12-29
  • 2013-05-17
  • 2017-04-23
  • 1970-01-01
  • 2018-10-17
  • 2010-11-16
  • 2016-11-06
相关资源
最近更新 更多