PowerShell文件重命名

时间:2015-09-01 14:12:47

标签: windows powershell rename file-rename powershell-v4.0

如果在文件重命名过程中文件名已包含字符串,如何忽略文件重命名

我的例子:

Get-ChildItem "D:\Shares\WinCAP Data\DAYPROT\OFS-222_2\*.csv" | Rename-Item -NewName { $_.Name -replace "\.csv", "TC.csv" }

我想重命名没有字符串的文件" TC"在文件名中 - 例如:

abc.csv重命名
defTC.csv不想重命名

2 个答案:

答案 0 :(得分:0)

您可以使用正则表达式过滤掉不需要重命名的文件:

?{!($_.fullname -match "TC\.csv")}

所以,举个例子:

Get-ChildItem "D:\Shares\WinCAP Data\DAYPROT\OFS-222_2\*.csv" | 
?{!($_.fullname -match "TC\.csv")} |
Rename-Item -NewName { $_.Name -replace "\.csv", "TC.csv" }

将日期过滤器合并到此中,如下所示:

Get-ChildItem "D:\Shares\WinCAP Data\DAYPROT\OFS-222_2\*.csv" | 
?{!($_.fullname -match "TC\.csv") -and $_.CreationTime -ge (get-date).AddDays(-1).Date} |
Rename-Item -NewName { $_.Name -replace "\.csv", "TC.csv" }

答案 1 :(得分:0)

作为一种更简单,更直接的解决方案,您只需过滤到ForEach循环并使用IF语句即可。可能效率不高,但更容易维护和适应其他用途。

Get-ChildItem "D:\Shares\WinCAP Data\DAYPROT\OFS-222_2\*.csv" | Foreach-Object { 
    if ($_.Name -notlike "*TC*") { 
        Rename-Item $_ ($_.Name -Replace "\.csv", "TC.csv") 
    } 
}

或者将其传递给Where过滤器,然后传递给重命名(注意这个特定语法需要PS v3):

Get-ChildItem "D:\Shares\WinCAP Data\DAYPROT\OFS-222_2\*.csv" | Where Name -notlike "*TC*" | Rename-Item $_ ($_.Name -Replace "\.csv", "TC.csv")