首页 > 解决方案 > 是否可以通过删除文件夹的名称来编写一个简单的代码来批量重命名文件夹内的文件?

问题描述

所以我有很多文件(大约 1,400 个)分布在大约 500 个文件夹中。所有这些文件都将它们所在文件夹的名称作为其名称的一部分。我需要重命名它们并从中删除文件夹名称。

我尝试过使用批量重命名实用程序,但它需要商业许可证才能运行其 javascript 程序。我尝试过使用 DOS 代码,但我最后一次使用 DOS 或脚本是在我的大学时代(十年或更长时间)。

恐怕我不知道代码。只要它工作简单,我会很高兴。我只是想通过自动化来拯救我的大脑免于折断。

例如,我有一个名为 GREEN 的文件夹,该文件夹中有一个名为 YELLOW-sun 和 YELLOW plant 和 Yellow car 的文件或其他名称中带有“Green”的文件。

我想让文件自动重命名(每个文件夹运行一次,或者完整运行主文件夹中的所有子文件夹),使其变为 -Mulch 或 Grass 或 car 或其他任何东西。

任何帮助将不胜感激。

我在下面添加了一条评论以帮助进一步解释这一点,因为我不清楚。

标签: filebatch-filedirectoryrename

解决方案


这个想法听起来可行,但使用小型 PowerShell 脚本快速检查很快就会发现隐藏的陷阱。一旦涉及数字/日期,您将重命名您不想要的文件。

ForEach($Dir in Get-ChildItem -Path Q:\Test\2019 -Directory -Recurse){
 Get-ChildItem -Path $Dir.FullName -File -Filter "*$($Dir.Name)*" |
   Rename-Item -NewName {$_.Name -replace $Dir.Name} -WhatIf
}

(为了话题,可以打包成一批)

从今年开始在我的测试文件夹上运行示例:

WhatIf: Ausführen des Vorgangs "Datei umbenennen" für das Ziel "Element: Q:\Test\2019\01\01\SO_53992011.ps1 Ziel: Q:\Test\2019\01\01\SO_539921.ps1".
WhatIf: Ausführen des Vorgangs "Datei umbenennen" für das Ziel "Element: Q:\Test\2019\01\01\SO_54013736.txt Ziel: Q:\Test\2019\01\01\SO_543736.txt".
WhatIf: Ausführen des Vorgangs "Datei umbenennen" für das Ziel "Element: Q:\Test\2019\01\04\SO_54044173.ps1 Ziel: Q:\Test\2019\01\04\SO_544173.ps1".
WhatIf: Ausführen des Vorgangs "Datei umbenennen" für das Ziel "Element: Q:\Test\2019\01\06\SO_54064719.cmd Ziel: Q:\Test\2019\01\06\SO_544719.cmd".
WhatIf: Ausführen des Vorgangs "Datei umbenennen" für das Ziel "Element: Q:\Test\2019\01\07\SO_54070456.cmd Ziel: Q:\Test\2019\01\07\SO_540456.cmd".
WhatIf: Ausführen des Vorgangs "Datei umbenennen" für das Ziel "Element: Q:\Test\2019\01\07\SO_54075981.ps1 Ziel: Q:\Test\2019\01\07\SO_545981.ps1".
WhatIf: Ausführen des Vorgangs "Datei umbenennen" für das Ziel "Element: Q:\Test\2019\01\14\SO_54181420.ps1 Ziel: Q:\Test\2019\01\14\SO_541820.ps1".
%<---------------->%

带有别名的批处理/命令行变体并-WhatIf查看将执行的内容

powershell -NoP -C "ForEach($Dir in gci . -Dir -Rec){gci $Dir.FullName -File -Filter \"*$($Dir.Name)*\"|Ren -NewN {$_.Name -replace $Dir.Name} -WhatIf }"

不系安全带也一样:

powershell -NoP -C "ForEach($Dir in gci . -Dir -Rec){gci $Dir.FullName -File -Filter \"*$($Dir.Name)*\"|Ren -NewN {$_.Name -replace $Dir.Name} }"

推荐阅读