【发布时间】:2019-09-27 10:58:27
【问题描述】:
我希望能够获取文件夹中的文件并将其以批处理或 PowerShell 的形式写入文本文件。文本文件中的输出应该有 FileName、NewFileName、DateModified。 FileName 是文件在被程序摄取和输出之前的名称。 NewFileName 是从程序输出并存储在输出文件夹中的文件的名称。
下面的 PowerShell 脚本是我用来获取文件的名称和修改日期以显示在文本文件中的。
Get-ChildItem -Path D:\Documents\Projects\Trans-Wrapping\TestOut\NewFiles\Audio\ -Recurse |
Select-Object @{n='File'; e={$_.Name + "," + $_.LastWriteTime}} |
Out-File "D:\Documents\Projects\Trans-Wrapping\TestOut\NewFiles\Audio\Log.txt"
Get-ChildItem -Path D:\Documents\Projects\Trans-Wrapping\TestOut\NewFiles\Video\ -Recurse |
Select-Object @{n='File'; e={$_.Name + "," + $_.LastWriteTime}} |
Out-File "D:\Documents\Projects\Trans-Wrapping\TestOut\NewFiles\Video\Log.txt"
但是,我想要的输出是被摄取的原始文件名。
在程序中摄取之前的文件名:Some_Name_file.mxf
摄取后的新文件名:random_exactly_37_characters_FileName.mxf_random_exactly_11_characters
原来的文件已经不存在了,所以我可以只添加那个路径并说写它的名字。那么有没有一种方法可以删除文件名前的 37 个字符和文件名末尾的最后 11 个字符,并将其写在同一个文本文件中。我不想重命名 NewFileName,因为它会更改日期修改参数。
【问题讨论】:
-
为什么不使用 CSV 文件而不是纯文本。你可以使用
Get-ChildItem -Path D:\Documents\Projects\Trans-Wrapping\TestOut\NewFiles\Audio\ -Recurse | Select-Object Name , LastWriteTime | Export-Csv -Path "D:\Documents\Projects\Trans-Wrapping\TestOut\NewFiles\Audio\Log.csv" -NoTypeInformation -
我可以使用 csv,但是如何删除名称前的 37 个字符和名称后的 11 个字符。还有-NoTypeInformation 做什么@Olaf
-
请阅读 cmdlet Export-Csv 的帮助以了解它及其参数。您甚至可以尝试使用参数运行命令,一次不运行,然后自己比较结果。如果总是要删除 37 个字符,则可以使用 Powershell 中字符串可用的 substring 方法。例如
'ArbitraryString_With some Cahrachters Keep This and forget the rest'.Substring(38, 9)
标签: string powershell random cmd