首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用PowerShell在复制前删除文件名的一部分

使用PowerShell在复制前删除文件名的一部分
EN

Stack Overflow用户
提问于 2014-01-15 10:50:07
回答 2查看 400关注 0票数 3

我需要在复制过程中重命名文件,并去掉文件名的一部分。在用户添加到文件名之前,我一直在做的事情很简单:

代码语言:javascript
复制
dir $PROCDIR\$PDFTYPE\holding_pattern\*.pdf -recurse | sort -property lastwritetime | select    -first 1 | move-item -destination $PROCDIR\$PDFTYPE\begin_processing

我正在使用的文件名格式现在是xxx_xxx_xxx_xxx_xxx.pdf,其中_将信息拆分。X只是一个示例,因为该文件可以命名为LakeTahoe_February15_Airplane_0115201457_baseball.pdf.当我执行复制时,我需要保留前三个...所以从aaa_aaa_aaa_aaa_aaa.pdf到aaa_aaa_aaa.pdf。基本上去掉了最后两个。此外,如果除了LakeTahoe_February15_Airplane_.pdf之外没有其他东西,我也想去掉最后一个"_“。

我仍然是powershell的新手,但正在学习。这是很好的东西,但有时会让我感到沮丧:)。想法?

谢谢!

EN

回答 2

Stack Overflow用户

发布于 2014-01-15 12:28:41

下面是一个正则表达式解决方案,它可能会对您有所帮助:

代码语言:javascript
复制
dir $PROCDIR\$PDFTYPE\holding_pattern\*.pdf | sort -property lastwritetime | select    -first 1 | % { $_.Name -match '.*?_.*?_.*?(?=_)'; $Target = '$PROCDIR\$PDFTYPE\begin_processing\{0}.pdf' -f $matches[0]; Move-Item -Path $_.FullName -Destination $Target -WhatIf; };

我在测试中得到的结果似乎表明移动/重命名操作是成功的:

项目假设:在目标上执行“移动文件”操作“

:C:\test\asdf_blah_asdf_qwer_trew_ytui - Copy.pdf Destination: C:\Windows\System32\WindowsPowerShell\v1.0\$PROCDIR\$PDFTYPE\begin_processing\asdf_blah_a sdf.pdf”。

您可以安全地忽略我的示例中的伪目标路径,因为我没有定义$ProcDir$PDFType变量。

这是一个可读性更好的版本,有多行代码。

代码语言:javascript
复制
Get-ChildItem -Path c:\test\*.pdf | 
Sort-Object -Property lastwritetime | Select-Object -First 1 | 
ForEach-Object -Process { $_.Name -match '.*?_.*?_.*?(?=_)'; $Target = 'c:\test\subtest\{0}.pdf' -f $matches[0]; Move-Item -Path $_.FullName -Destination $Target -WhatIf; };

结果:

项目假设:在目标上执行“移动文件”操作“

:C:\test\asdf_blah_asdf_qwer_trew_ytui - Copy.pdf Destination: C:\test\subtest\asdf_blah_asdf.pdf".

票数 1
EN

Stack Overflow用户

发布于 2014-01-15 15:08:20

另一种方法,内联和更简洁(这是管道的最后一个阶段;它之前的一切保持不变):

代码语言:javascript
复制
| mi -Des $PROCDIR\$PDFTYPE\begin_processing\$(($_.Name -split '_')[0..2] -join '_').pdf

(mi -DesMove-Item -Destination相同;我使用简短的版本将其放在一行中,没有滚动条。)

这样做的目的是将基本文件名拆分为一个由下划线分隔的部分组成的数组,选择数组的前三个元素(即文件名的前三个部分),用下划线将它们粘合在一起,然后重新添加.pdf扩展名。

另一种方法是使用-replace运算符匹配要删除的部分,并将其替换为空字符串:

代码语言:javascript
复制
| mi -Des $PROCDIR\$PDFTYPE\begin_processing\$($_.Name -replace '(_[^_]+){2}(?=\.)', '')
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21128244

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档