2016-11-24 100 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