繁体   English   中英

PowerShell文件重命名

[英]PowerShell File rename

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

我的例子:

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

我只想重命名文件名中没有字符串“ TC”的文件-例如:

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

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

?{!($_.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" }

作为一个更简单,更直接的解决方案,您可以过滤到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")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM