我希望能够将文件保存在文件夹中,然后以批处理或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"
但是,我想要的输出是摄取的原始文件名。
在程序中导入之前的FileName:Some_Name_file.mxf
提取后的NewFileName:random_exactly_37_characters _ FileName.mxf _ random_exactly_11_characters
原始文件已不存在,因此我可以添加该文件的路径并说出其名称。因此,有一种方法可以删除文件名之前的那37个字符,以及文件名末尾的最后11个字符,并将其写在同一文本文件中。我不想重命名NewFileName,因为它将更改修改日期的参数。
这假定您要删除的内容中包含下划线和文件扩展名,并且您始终希望删除37个前导字符和11个后继字符。您可以使用文件名的Substring
属性来执行此操作。
Get-ChildItem -Path D:\Documents\Projects\Trans-Wrapping\TestOut\NewFiles\Audio\ -File -Recurse |
Rename-Item -NewName {$_.Name.Substring(37,($_.Name.Length-37-11))}
一种替代方法是使用-replace
运算符,该运算符使用正则表达式进行字符串匹配。
Get-ChildItem -Path D:\Documents\Projects\Trans-Wrapping\TestOut\NewFiles\Audio\ -File -Recurse |
Rename-Item -NewName {$_.Name -replace '^.{37}(.*?).{11}$','$1'}