从PowerShell中的文件名中删除第n个字符

时间:2015-05-07 10:23:11

标签: powershell

我在许多目录中有大量文件,具有这种命名约定:

" BU1_KCG_RANDOM_030515.csv"等

我需要删除第16和第17个字符。所以新的文件名是" BU1_KCG_RANDOM_0515.csv"。

如何相应地重复多个目录重命名?

到目前为止,我已经得到了以下内容,但我不确定接下来会发生什么。

Get-ChildItem -Filter *.csv -Recurse | Rename-Item -NewName {$_.Name..................}

3 个答案:

答案 0 :(得分:1)

使用-replace:

Get-ChildItem -Filter *.csv -Recurse | 
foreach { $_ | rename-item -newname ($_.Name -replace '(.{15})..(.+)','$1$2')  }

答案 1 :(得分:0)

比特基本,例如,不检查文件是否已经重命名,但是应该让你进入下一步

case
    when (missing(a.string1) and missing(b.string1)) then 300
    else compged(a.string1,b.string1)
end as compged_11,
/* do the same for combinations 12, 21 and 22 */
MIN(calculated compged_11, 
    calculated compged_12, 
    calculated compged_21, 
    calculated compged_22) < 200

,其中

gci -filter *.csv -rec | % { Rename-Item $_ -newname ($_.Name.substring(0,15) + $_.Name.substring(17)) }

答案 2 :(得分:0)

我更喜欢mjolinor's answer,但您可以随时使用PowerShell以不同的方式执行操作。由于您可以像char数组一样索引字符串,因此我们可以使用一个小数组表示法来获取您想要的字符。

$oldname = "BU1_KCG_RANDOM_030515.csv"
$newname = -join $oldname[0..14 + 17..($oldname.Length)]
$newname
BU1_KCG_RANDOM_0515.csv

我们还需要使用-join将数组转换回字符串。