Mar*_*ean 6 powershell powershell-ise powershell-2.0 powershell-3.0
我需要一个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
}
Run Code Online (Sandbox Code Playgroud)
好的,花了一些时间在这上面,脚本在下面添加到上一次尝试.看起来我这次非常接近,但最后写入文本文件不是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)
}
Run Code Online (Sandbox Code Playgroud)
Wii*_*opp 16
这是一个展示Powershell和.NET协同工作丰富性的好机会.
首先,获取文件夹所有子文件夹全名的最简单方法是使用如下所示的行:
$folders = (Get-ChildItem -Directory -Recurse M:\Music).FullName
Run Code Online (Sandbox Code Playgroud)
-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}
}
Run Code Online (Sandbox Code Playgroud)
我们访问每个子文件夹,对于每个子文件夹,我们:
永远不会让我惊讶的是Powershell是多么强大和简洁.创建$ fileBaseNames的行可能对某些人来说有点粗糙,但将foreach-object构造转换为易于准备的多行foreach子句是一件很容易的事.
| 归档时间: |
|
| 查看次数: |
41190 次 |
| 最近记录: |