2016-11-24 68 views
1

我想删除特定字符后的部分文件名。我看了一下,但似乎无法找到合适的答案。 每个文件名都是独一无二的,期望在中间。删除文件名的一部分

当前文件名;

somefilename - somefilenamewithmore 
somefilename123 - somefilenamewithmore123 
somefilename5555 - somefilenamewithmore5555 

我希望它是什么;

somefilename 
somefilename123 
somefilename5555 


富勒参考文件位于C:\users\%username%\rename

我发现很多信息对删除字符的具体数量或从文件名中删除特定的东西,但没有任何运气试图删除一切特定之后的一切。

任何帮助/指针将大大赞赏

回答

2
Get-ChildItem C:\users\$env:username\rename -file | foreach { 
    Rename-Item -Path $_.FullName -NewName ($_.Name.Split(' ')[0]) } 

可选的,如果有一个扩展名(如.PDF或其他),你可以编辑到:

Rename-Item -Path $_.FullName -NewName ($_.Name.Split(' ')[0] + $_.Extension) 

而且,我不确定你是否想要当前的用户名,所以我最初离开了你的路径,但是人们编辑了这部分,或许这样做更有意义,我不确定;)

+0

%的用户名%不会在这里工作,你可能想用'$ ENV来替代它:username'。但仍然是一个有效的答案,因此得到了积极评价。 –

+0

好吧,我不确定他是否指的是currentuser或其他用户...这就是为什么我保持原样 – 4c74356b41

+0

感谢您的支持,我发现一些文件名有方括号,所以我改变了 - 路径-LiteralPath。 –

1
$files = @(
    "somefilename - somefilenamewithmore", 
    "somefilename123 - somefilenamewithmore123" 
    "somefilename5555 - somefilenamewithmore5555" 
) 

$files | %{ 
    $_.Split("-")[0].Trim() 
} 
1

这里使用$env:USERPROFILE来确定路径的解决方案:

Get-ChildItem (Join-Path $env:USERPROFILE 'rename') -file | ForEach-Object { 
    Rename-Item -Path $_.FullName -NewName ('{0}{1}' -f ($_.Name -replace '([^-]*).*', '$1'), $_.Extension) } 
+0

再次你疯狂的正则表达式;))) – 4c74356b41