如何使用Powershell集合内容重命名文件扩展名

如何使用Powershell集合内容重命名文件扩展名,powershell,csv,batch-processing,powershell-3.0,file-extension,Powershell,Csv,Batch Processing,Powershell 3.0,File Extension,我有下面的Powershell代码,我打算扫描一个文件夹,查找放入.TXT文件中的新文件,将逗号替换为|(管道符号),从文件中删除双引号,并将文件从.TXT重命名为.CSV,然后将其保存到输出文件夹 param($InputDIR,$OutputDIR) $Dir = get-childitem $InputDIR -Recurse $CSVList = $Dir | where {$_.Name -like "*.TXT"} Write-Host -ForegroundColor Whit

我有下面的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
}

我遇到的问题是,设置的内容输出的文件在“.TXT”后面附加了“.CSV”扩展名,如下所示:“myfile.TXT.CSV”

我如何做我正在尝试做的事情,并在没有原始.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)
$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
我使用两个步骤确定新文件路径:

  • 检索不带扩展名的文件名(使用[io.path]::GetFileName WithoutExtension),并使用格式字符串将“.csv”添加到其中
  • 使用新文件名加入目录

  • 你的意思是找分机
    ren myfile.txt myfile.txt.csv
    Dir*.txt |重命名项-newname{$\.name-替换“\.txt$”,“.csv”}
    问题是您使用了原始名称,并在其末尾添加了
    .csv
    。如果要替换扩展名,需要先从原始文件名中删除扩展名。
    Dir*.txt | rename item-newname{$\.name-replace'\.txt$','.txt.csv'}
    然后我dir将i.txt改为.txt.csv:-?@EtanReisner这对我真的很有帮助,通过重新发布我的原始代码,它对我帮助更大,因为我知道在我的代码中添加内容的确切位置。你可以使用
    $csvfile.Basename
    获得与
    [io.path]::GetFileName WithoutExtension()
    @motionpotion>相同的值“替换此/这些行…”。。。。如果没有任何解释(在这种情况下),随机代码块通常是没有帮助的由于只处理扩展名为
    .txt
    的文件,因此可以这样定义输出文件:
    $OutputFile=$InputFile-替换“\.txt$”,“.csv”