powershell - 如何批量重命名多个文件夹中的多个文件并将它们合并到一个大文件夹中?
问题描述
我已经按顺序列出了 100 多个文件夹的列表。
文件夹 1 文件夹 2 文件夹 3 等等...
在每个文件夹中都包含按顺序排列的图像
001.jpg 002.jpg 003.jpg 等等...
最终,我试图将这 100 多个文件夹合并到一个大文件夹中,其中所有图像都按照它们的顺序排列,将每个图像重命名为 000000001 - 99999999。
我是编码的完整初学者。我曾尝试使用批量重命名实用程序,但我无法将多个文件夹中的所有图像合并到一个文件夹中。
任何帮助表示赞赏。
谢谢!
解决方案
这是满足您的要求所需的最少脚本。没有错误检查。
$topSourceFolderName
根据您的计算机的$targetFolderName
需要进行设置
我假设您的 100 多个文件夹、文件夹 1 文件夹 2 文件夹 3 等都存在于一个父文件夹下 ( $topSourceFolderName
)
我假设单个父文件夹和单个父文件夹下的所有 100 多个文件夹仅包含 jpg 文件
我假设您的“一个大文件夹”($targetFolderName
)不在单个父文件夹($topSourceFolderName
)下的任何地方
我假设 PowerShell 脚本存储在一个文件夹中,而$topSourceFolderName
不是$targetFolderName
如果您有任何问题,请发送电子邮件至 william.s.charlton@outlook.com
在我的示例中,PowerShell 脚本存储在 c:\temp\bulkConsolidate.ps1
C:\Temp\massiveFolder 是目标文件夹。它最初是空的。
C:\Temp\topFolder\Folder 1 有 001.jpg 和 002.jpg
C:\Temp\topFolder\Folder 2 有 001.jpg 和 002.jpg
脚本运行后,C:\Temp\massiveFolder 有 00000001.jpg、00000002.jpg、00000003.jpg 和 00000004.jpg
00000001.jpg 复制自 C:\Temp\topFolder\Folder 1\001.jpg
00000002.jpg 复制自 C:\Temp\topFolder\Folder 1\002.jpg
00000003.jpg 复制自 C:\Temp\topFolder\Folder 2\001.jpg
00000004.jpg 复制自 C:\Temp\topFolder\Folder 2\002.jpg
cls
$topSourceFolderName = "C:\Temp\topFolder"
$targetFolderName = "C:\Temp\massiveFolder"
#define empty PowerShell array
$fullyQualifiedJpgSourceFileNameList = @()
#get fully-qualified file name (FullName) for all files in and below $topFolderNmae
$fullyQualifiedJpgSourceFileNameList = @((Get-ChildItem -recurse -LiteralPath $topSourceFolderName -File) | Select -Property FullName | sort -Property FullName)
#Copy each file to the single target directory, renaming each file as it is copied
$targetFileNameIndex = 0
foreach ($fullyQualifiedJpgSourceFileName in $fullyQualifiedJpgSourceFileNameList)
{
#create fully qualified target file name for this jpg file
#format $targetFileNameIndex so it has 8 leading digits
#https://devblogs.microsoft.com/scripting/hey-scripting-guy-how-can-i-use-leading-zeroes-when-displaying-a-value-in-windows-powershell/
$fullyQualifiedJpgTargetFileName = ($targetFolderName + "\" + $targetFileNameIndex.ToString("00000000") + ".jpg")
#increment index for next jpg file copy
$targetFileNameIndex = ($targetFileNameIndex + 1);
Copy-Item -LiteralPath $fullyQualifiedJpgSourceFileName.FullName -Destination $fullyQualifiedJpgTargetFileName -Force
}
推荐阅读
- java - Android AlarmManager RTC_WAKEUP 不精确?
- wordpress - 检查无效 UTF-8、转换单个小于号以及出于安全考虑剥离八位字节的原因
- javascript - 函数声明是块范围的
- javascript - event.preventDefault() 不会停止按键或按键事件
- multithreading - 如何解决消费者的问题?
- node.js - 使用 git bash 在 Windows 中运行 npm test 命令时出错
- swift - 如何在 NSView 子类中绘制两行文本?(macOS 系统托盘)
- python - 使用粗糙集理论进行特征选择
- core-data - 带有 NSPredicate 的 FetchRequest 不会在新条目上更新
- java - 无法使用 Apache CXF 库 Maven 从 WSDL 生成 POJO