我在Windows目录中有一组文件(OldName),我想根据以下CSV文件重命名(NewName):
OldName,NewName
Sources/texas play_PGC_Cpgc_entryPoint_Cbp_1.f4v,01 Texas Play.f4v
Sources/texas play_PGC_Cpgc_entryPoint_Dbp_1.f4v,02 First Song.f4v
Sources/texas play_PGC_Cpgc_entryPoint_Ebp_1.f4v,03 Yellow Rose.f4v
我不知道如何循环访问CSV文件...找到每个文件并替换。
任何想法都将不胜感激。
答案 0 :(得分:5)
首先将您的CSV文件导入powershell
$AnyVariableName = Import-Csv "$env:USERPROFILE:\Desktop\directoryname.txt"
注意:在我的示例中,CSV文件的路径位于我的桌面上,但您的桌面可能有所不同。
然后使用foreach循环重命名项目
foreach ($objName in $AnyVariableName){
Rename-Item $objName.OldName $objName.NewName
}
答案 1 :(得分:0)
一种方法是创建两个列表并循环遍历每个列表。 CSV文件将是一个参考列表,因此我们将获取内容并将其从CSV转换然后将其存储在变量中
$CSVRef = Get-Content "C:\Path\To\CSV.csv" | ConvertFrom-CSV
然后我们将获取您想要更改名称的文件列表,并循环浏览每个文件。在循环内部,您可以运行另一个循环以在参考列表中查找当前名称,然后将其更改为新名称。
Get-ChildItem "C:\path\to\f4v\files" -Filter *.f4v | ForEach-Object {
#Grab the current item in a variable to access it within the second loop
$CurrentFile = $_
$CSVRef | ForEach-Object {
if ($CurrentFile.Name -ilike $_.OldName) {
Rename-Item $CurrentFile.FullPath $_.NewName
}
}
}
因此,在第二个循环中,我们尝试将文件名与CSV文件列表中的每个“OldName”项进行比较。如果OldName匹配当前文件中的某个位置,那么我们将循环遍历,然后运行Rename-Item并为其提供NewName。它应该自动重命名该文件。
答案 2 :(得分:0)
将两个示例结合起来很好用
$CSVRef = Import-Csv "C:\Temp\Filename.txt"
Get-ChildItem "C:\Temp\FileFolder" -Filter *.pdf | ForEach-Object {
$CurrentFile = $_
ForEach ($objName in $CSVRef) {
if ($CurrentFile.Name -ilike $objName.OLDNAME) {
Rename-Item $CurrentFile.FullName $objName.NEWNAME
}
}
}