我完全是新手,尝试过各种教程和指南以及 ChatGPT 帮助来解决这个问题,但都无济于事。我的目标是重新组织本地下载的有声读物库,方法是使用作者姓名创建一个新目录,然后将该作者的有声读物目录复制到该新目录中作为新子目录。
例子
当前目录路径 =
E:\scripttest\Adrian Tchaikovsky - Walking to Aldebaran, Narrated by Adrian Tchaikovsky [1630154431]
新目录路径 =
E:\scripttest\Adrian Tchaikovsky\Walking to Aldebaran, Narrated by Adrian Tchaikovsky [1630154431]
到目前为止,我已经能够隔离作者的姓名,创建新目录并成功创建一个名称正确的新子目录。
- 该脚本检查作者目录是否存在,并通过抓取“-”之前的文本来创建新的作者目录(如有必要)
- 然后,它抓取“-”后面的所有内容,创建一个包含书名的新子目录
- 它应该将内容从原始目录移动到新的书名子目录
- 一旦我让移动工作正常进行,我打算添加确认所有文件都已成功移动,然后删除源目录
不幸的是,源目录中的内容都不存在。Powershell 没有返回任何错误,脚本似乎已成功完成。源目录包括这些文件类型 - *.ico、*.m4b 和 *.jpg。我希望批量复制文件,而不是指定要复制的每种文件类型,以使其保持简单。
到目前为止的脚本:
param([switch]$Elevated)
function Test-Admin {
$currentUser = New-Object Security.Principal.WindowsPrincipal $([Security.Principal.WindowsIdentity]::GetCurrent()) $currentUser.IsInRole([Security.Principal.WindowsBuiltinRole]::Administrator)
}
if ((Test-Admin) -eq $false) {
if ($elevated) {
# tried to elevate, did not work, aborting
} else {
Start-Process powershell.exe -Verb RunAs -ArgumentList ('-noprofile -noexit -file "{0}" -elevated' -f ($myinvocation.MyCommand.Definition))
}
exit
}
'running with full privileges'
$mainDir = "E:\scripttest"
$directories = Get-ChildItem -Path $mainDir | Where-Object { $_.PSIsContainer }
foreach ($dir in $directories) {
# Extract the author's name and the remaining part of the directory name
if ($dir.Name -match "^(.*?) - (.*)$") {
$author = $matches[1]
$title = $matches[2]
$authorDir = Join-Path -Path $mainDir -ChildPath $author
if (-not (Test-Path -Path $authorDir)) {
New-Item -Path $authorDir -ItemType Directory
}
$newSubDir = Join-Path -Path $authorDir -ChildPath $title
New-Item -Path $newSubDir -ItemType Directory
Get-ChildItem -Path $dir.FullName | ForEach-Object {
Move-Item -Path $_.FullName -Destination $newSubDir -Force
}
}
}