我需要一个 PowerShell 脚本来导出没有文件扩展名的文件名列表,然后输出到每个子文件夹单独的文本文件。我需要在脚本中指定一个父目录,然后 PowerShell 需要关闭并使用子文件夹的名称作为文本文件名(没有空格和小写)为每个子文件夹创建一个单独的文本文件。然后在创建的每个基于子文件夹的文本文件中,有一个包含在每个子文件夹中的文件名列表,没有文件扩展名。
$files = Get-ChildItem -Path "M:\Music" -Recurse `
| Where-Object {`
$_.DirectoryName -notlike "*Other\Children" -and `
$_.DirectoryName -notlike "*Other\Numbers" -and `
$_.Extension -eq ".mp3"}
#Now loop through all the subfolders
$folder = $files.PSisContainer
ForEach ($Folder in $files)
{
$ParentS = ($_.Fullname).split("\")
$Parent = $ParentS[@($ParentS.Length - 2)]
Select-Object BaseName > C:\Users\me\Documents\$parent.txt
}
好的,花了一些时间在这上面,脚本被添加到之前的尝试中。这次似乎我非常接近,但是最后写入文本文件不是 100%,我之前使用的是 Out-File,它在每个文本文件的底部留下一个我不想要的空行。为什么我切换到 [system.io.file]::WriteAllText 和 [system.io.file]::AppendAllText,但是它们中的每一个都有自己的特质,不能满足我的需求。在文本文件中,我需要一列中没有空行的文件列表。
$files = Get-ChildItem -Path "M:\Music" -Recurse `
| Where-Object {`
$_.DirectoryName -notlike "*Other\Children" -and `
$_.DirectoryName -notlike "*Other\Numbers" -and `
$_.Extension -eq ".mp3"}
#Now loop through all the subfolders
$folder = $files.Directory
ForEach ($Folder in $files)
{
$ParentS = ($folder.Fullname).split("\")
$ParentT = $ParentS[(@($ParentS.Length - 2))]
$Parent = $ParentT.replace(' ','')
[system.io.file]::WriteAllText("C:\Users\me\Documents\$parent.txt", $folder.BaseName, [System.Text.Encoding]::Unicode)
}
最佳答案
这是展示 Powershell 和 .NET 协同工作的丰富性的好机会。
首先,获取文件夹所有子文件夹全名的最简单方法是使用如下一行:
$folders = (Get-ChildItem -Directory -Recurse M:\Music).FullName
-Directory 限制返回到 DirectoryInfo 对象数组的内容。通过利用 Powershell 仅返回 FullName 属性的能力,我们可以在一个语句中返回一组文件夹路径
只需多几行代码,我们就可以创建列出目录中歌曲的文件:
foreach ($folder in $folders)
{
$fileBaseNames = (Get-ChildItem $folder\*.mp3).FullName | % {[System.IO.Path]::GetFileNameWithoutExtension($_)}
$catalogFileName = (Split-Path $folder -Leaf) -replace ' ',''
if ($fileBaseNames) {Set-Content -Path $folder\$catalogFileName.txt -Value $fileBaseNames}
}
我们访问每个子文件夹,对于每个子文件夹,我们:
Powershell 的强大和简洁一直让我惊叹不已。对于某些人来说,创建 $fileBaseNames 的行可能有点粗糙,但是将 foreach-object 构造转换为易于准备的多行 foreach 子句将是一件很容易的事情。
关于PowerShell 脚本仅导出没有文件扩展名的文件名列表,然后输出到每个目录单独的文本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24284267/