使用txt文件中的字符串重命名文件

时间:2014-01-22 20:34:53

标签: string powershell filenames rename

这个问题可能听起来令人困惑,但我真正需要的是能够使用字符串数组更改文件名。

例如:

文件1包含: abc1234cd.jpg abc2543ac.jpg ...

文件2包含(数组/参考)

1234c 2543a ...

abc1234cd.jpg的新文件名现在应该是1234c.jpg等等。

使用powershell或任何其他语言可以做到这一点吗?

谢谢,

2 个答案:

答案 0 :(得分:0)

这应该这样做,假设文件具有一对一的匹配。

# Get contents of file 1
$File1 = Get-Content -Path $PSScriptRoot\File1.txt;
# Get contents of file 2
$File2 = Get-Content -Path $PSScriptRoot\File2.txt;

# Iterate over each item in $File1
foreach ($Item in $File1) {
    $FileList = Get-ChildItem -Path "c:\test\$Item*.jpg";
    foreach ($File in $FileList) {
        # Determine file's new name, based on corresponding value in File2
        $NewName = $File.Name -replace $Item, $File2[$File1.IndexOf($Item)];

        Write-Host -Object ('Old name: {0}, new name: {1}' -f $Item, $NewName);
    }
}

答案 1 :(得分:0)

经过无数个小时,我终于得到了代码。

$dir = 'file.txt'
$backup = 'C:\Users\all users\Desktop\backup'
$file = 'file2.txt'
$files =  Import-Csv -Header Name -Path $file
foreach ($line in $files){
$linefiles = Get-ChildItem $dir | where {$_.BaseName.Contains($line.Name)}
 $count = 0
 foreach ($linefile in $linefiles) {
     #do stuff to each file here
     $name = $linefile.BaseName
     $extension = $linefile.Extension
     $newName = $line.Name

     Copy-Item -Path "$dir\$linefile" -Destination "$backup\$linefile"

     if ($count -gt 0){
       Rename-Item -NewName "$newName-$count$extension" -Path "$dir\$linefile"}
     else{
      Rename-Item -NewName "$newName$extension" -Path "$dir\$linefile"}

     $count++}
 }