我如何在不重命名文件的情况下从文本文件的一行中删除字符?

问题描述 投票:0回答:1

我希望能够将文件保存在文件夹中,然后以批处理或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,因为它将更改修改日期的参数。

string powershell random cmd
1个回答
0
投票

这假定您要删除的内容中包含下划线和文件扩展名,并且您始终希望删除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'}
© www.soinside.com 2019 - 2024. All rights reserved.