如果在文件重命名过程中文件名已包含字符串,如何忽略文件重命名。
我的例子:
Get-ChildItem "D:\Shares\WinCAP Data\DAYPROT\OFS-222_2\*.csv" | Rename-Item -NewName { $_.Name -replace "\.csv", "TC.csv" }
我想重命名没有字符串的文件" TC"在文件名中 - 例如:
abc.csv
重命名
defTC.csv
不想重命名
答案 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")