2014-10-09 87 views
0

我已經四處搜索並搜索了一個解決方案,但似乎沒有任何東西我正在尋找。查找以字符串開頭的文件,並從文件名中刪除X個字符Powershell

我有40個左右的文件,每天到達的日期時間字符串在我需要刪除的文件名的開始。

文件的格式爲: YYYYMMDD_HHMM_filenametokeep.csv

我想先尋找一個文件夾中有20開頭的文件(如多數民衆贊成在文件名中YYYY開始)和然後通過從這些文件名中刪除前14個字符來重命名它找到的任何文件。

理想情況下,我想在PowerShell中做到這一點,所以我可以把它作爲SQL工作中的一個步驟。

有沒有人有任何想法/解決方案呢?

提前感謝

+0

如果「filenametokeep」對於多個文件是相同的 - 它是否應該被覆蓋? – 2014-10-09 11:38:14

+0

嗨,對不起,我應該提到它永遠不會是一樣的。每個文件都會有不同的結局。謝謝 – user2992750 2014-10-09 11:45:15

回答

1
Ls d:\path\to\folder\20*.csv | ren -new { $_.name -replace '^.+?_.+?_' } 

或者你也可以使用:

Ls d:\path\to\folder\20*.csv | ren -new { $_.name -replace '^.{14}' } 
+0

謝謝,但我怎樣才能指定一個文件夾來運行它? – user2992750 2014-10-09 12:21:16

+0

所以我使用了這個腳本,並將** 20 * .csv **更改爲** D:\ path \ to \ folder \ 20 * .csv **,並找到並刪除了我需要的字符,但它也是刪除文件擴展名。我如何保留文件擴展名?謝謝 – user2992750 2014-10-09 12:58:49

+0

@ user2992750您可以使用'.Name'來代替'.Basename'。不知道這將如何影響你的正則表達式 – Matt 2014-10-09 13:01:49

0

如果你忠實地打算只用.SubString

去除前14個字符,你可以做到這一點,以及
Get-ChildItem D:\path\to\folder\20*.csv | ForEach-Object{ 
    Rename-Item -Path $_ -NewName ($_.Name.SubString($_.Name.Length -14))} 

This TechNet article談及.Substring正在使用像VBS Right方法。它會返回一個字符串減去前14個字符。

相關問題