使用powershell重命名文本列表中的文件

ubof19bj  于 2022-12-26  发布在  Shell
关注(0)|答案(3)|浏览(245)

我在这里看到了很多关于如何处理这个任务的帖子,我试过了,但都没有效果,每次我运行powershell代码,我仍然得到同样的错误消息:"无法重命名,因为文件不存在..."
我只是简单地想从我在文本文件中的文件名列表中重命名一个文件夹中的一堆文件。
下面是代码的一个版本:

$inputFile1=@()
$filesTochange=@()
$inputFile1 = get-content H:\dev\outputfile.txt
$filesToChange = Get-ChildItem H:\dev\extractedFiles1  | Foreach -Begin 
{$i=0}
-process {Rename-Item $filesToChange[$i] -newName ($inputFile1[$i] -f $i++) 
}

下面是另一个版本:

$inputFile1=@()    
$filesTochange=@()
$inputFile1 = get-content H:\dev\outputfile.txt             
$filesToChange = Get-ChildItem H:\dev\extractedFiles1 
$i=0
foreach ($fil in $filesToChange) {Rename-Item $fil -NewName 
$inputFile1[$i++]}
dfuffjeb

dfuffjeb1#

不完全确定你的设置或想要的输出是什么,但给这个一个旋转芽。不是最优雅的外观解决方案,但希望这是你正在寻找的?一定要注意在您的outputfile.txt文件名排序和文件夹如何列出时,你得到的子项。

$BasePath = 'C:\Test'
$FilesToChangeFolderName = 'extractedFiles1'
$filestochange = Get-ChildItem -Path "$BasePath\$FilesToChangeFolderName"

$FileNames = Get-Content "$BasePath\outputfile.txt"

if($filestochange.FullName.Count -eq $FileNames.Count)
{
    for($i=0; $i -lt $FileNames.Count; $i++)
    {
        write-host "Renaming file $($filestochange.Name[$i]) to $($FileNames[$i]+".txt")"
        Rename-Item -Path $filestochange.FullName[$i] -NewName ($FileNames[$i]+".txt")
    }
}

设置-输出文件. txt包含:

renametoA
renametoB
renametoC
renametoD
renametoE
renametoF

文件夹结构:

结果:

Renaming file renameto1.txt to renametoA.txt
Renaming file renameto2.txt to renametoB.txt
Renaming file renameto3.txt to renametoC.txt
Renaming file renameto4.txt to renametoD.txt
Renaming file renameto5.txt to renametoE.txt
Renaming file renameto6.txt to renametoF.txt

说明[TLDR]:下面的脚本接受一个文本文件输入,其中包含应该用于重命名您拥有的每个文本文件的名称。
示例:outputfile.txt文件包含以下名称:

renametoA
renametoB
renametoC
renametoD
renametoE
renametoF

在"extractedFiles1"文件夹中有6个文本文件,您可以在图像中看到。

脚本实际上根据output.txt文件中的名称重命名"extractedFiles1"文件夹中的文件。因此,它遵循以下逻辑:

Renaming file renameto1.txt to renametoA.txt
Renaming file renameto2.txt to renametoB.txt
Renaming file renameto3.txt to renametoC.txt
Renaming file renameto4.txt to renametoD.txt
Renaming file renameto5.txt to renametoE.txt
Renaming file renameto6.txt to renametoF.txt

因此,在所有脚本运行后,您的"extractedFiles1"文件夹将如下所示:

prdp8dxp

prdp8dxp2#

尽管这是一个较老的线程,但我想提供另一个“暴力”选项。CodeNagi的回复在PowerShell中运行良好,尽管我花了一点时间才开始工作。
如果您已经有一个文件名列表(output.txt),请考虑使用excel(或OpenOffice)和命令提示符cmd。本视频是此解决方案的分步指南:https://youtu.be/znhqGrF4gVQ
1.以管理员权限打开cmd。
1.创建当前(旧)文件名列表:
CD H:\设备\提取的文件1
目录〉输入. txt
1.打开input.txt(例如在记事本中)。它应该如下所示:
驱动器H中的卷是Windows
卷序列号为C123-4567
H:\设备\提取文件1的目录
2022年5月12日11时24分。
2022年5月12日11时24分
2022年5月12日09.34 5,255,248文件名1.txt
2022年5月12日09.34 5,255,952文件名2.txt
...
1.将带有文件名和时间戳的行复制到Excel工作表中
1.使用 Data〉Text to columns 将文件名与时间戳分开
1.从output.txt中复制或导入目标/新文件名到旧文件名旁边
1.使用公式=“ren”&”“&A1&”“&B1创建一个新列,结果如下所示

  • 文件名1.txt文件名A.txt*

1.复制所有公式并将其粘贴到cmd中。确保您位于正确的目录中。
注意:如果文件名中有空格,您需要先用撇号“”将每个文件名括起来。由于excel中的连接公式不接受“"”(三个撇号),请将自己设置为只包含“”(此处为C)的列,然后在连接中引用它:=“ren“&C1&A1&C1&”“&C1&B1&C1&。此外,如果您有重复的文件或希望确保它们复制正确,您可以使用MOVE功能而不是rename(ren)。
代替上述第6点,执行以下操作:
1.使用公式=“移动”&”“&A1&”“&“H:\dev\extractedFiles1\Renamed”&B1创建一个新列
1.将创建的命令复制到cmd中
它将根据B1中的名称移动和重命名文件。

lp0sw83n

lp0sw83n3#

本示例复制一个文件并将其重命名为列表csv
导入-CSV列表.csv -标题新文件名|% {复制项目路径archivo_convert. pdf-目标“$($_.新文件名).pdf”}

相关问题