2016-07-13 70 views
0

我有一個文件夾中的隨機文件名和擴展名的文件與另一個包含* .htm擴展名的隨機文件名。我想重命名文件夾中每個隨機文件的所有文件名以匹配一個* .htm文件,同時保留每個隨機文件的正確擴展名。重命名文件夾中的所有文件批處理或Powershell從批處理運行

因此,當批處理文件運行時,如「我的文件Name.HTM」將被檢測,以下文件將被重命名一個文件:重命名爲

  • 「Test.doc的」「我的文件Name.doc」

  • 「anyfile.jpg」 重命名爲 「我的文件Name.jpg」

  • 「的text.txt」 重命名爲 「我的文件Name.txt」

我已經試過

Rename "*.*" "*.htm" 

沒有成功。 * .HTM文件可以是任何未知的文件名,但將始終包含HTM擴展名,並且它始終是文件夾中唯一具有HTM擴展名的文件。然後我會從命令行運行批處理文件。

+1

你想做的事,對於單文件夾還是遞歸? –

+0

僅限一個文件夾。謝謝 –

回答

0

事情是這樣的:

$files = Get-ChildItem -Path D:\TEST_123 
$htmBaseName = $files | where {$_.Extension -eq '.htm'} | select -ExpandProperty BaseName 

foreach ($f in $files) { 
    if ($f.Extension -ne '.htm') { 
     Rename-Item -Path $f.FullName -NewName ($htmFileName + $f.Extension) 
    } 
} 

但是要注意:如果有多個文件具有相同分機。你會得到一個錯誤Cannot create a file when that file already exists

+1

試過這個,但它沒有做任何事情,沒有錯誤信息或指示問題。 –

+0

這很奇怪。我在發佈之前檢查瞭解決方案。 – n01d

+0

是的,同樣的問題與上面我懷疑的相同。不知道爲什麼它不工作。 謝謝 –

1

簡明的批處理文件:

for %%f in (*.htm) do set name=%%~nf 
ren * "%name%.*" 

相同的警告作爲n01d的答案。另外,不要把你的批處理文件放在同一個目錄下。

編輯:

這裏是一個示例會話顯示該批處理文件重命名所有的fiiles到.htm文件的名稱:

D:\tmp\kktmp>dir 
Volume in drive D has no label. 
Volume Serial Number is 4EDE-41E1 

Directory of D:\tmp\kktmp 

14/07/2016 12:06 <DIR>   . 
14/07/2016 12:06 <DIR>   .. 
14/07/2016 12:05     0 Author Name - Book Title - The Billionaires Revenge.htm 
14/07/2016 12:06     0 Book Title - The Billiona - Author Name.azw3 
14/07/2016 12:06     0 Book Title - The Billiona - Author Name.epub 
14/07/2016 12:06     0 Book Title - The Billiona - Author Name.mobi 
14/07/2016 12:06     0 Book Title - The Billiona - Author Name.pdf 
       5 File(s)    0 bytes 
       2 Dir(s) 52,725,227,520 bytes free 

D:\tmp\kktmp>type ..\t.bat 
for %%f in (*.htm) do set name=%%~nf 
ren * "%name%.*" 

D:\tmp\kktmp>..\t.bat 

D:\tmp\kktmp>for %f in (*.htm) do set name=%~nf 

D:\tmp\kktmp>set name=Author Name - Book Title - The Billionaires Revenge 

D:\tmp\kktmp>ren * "Author Name - Book Title - The Billionaires Revenge.*" 

D:\tmp\kktmp>dir 
Volume in drive D has no label. 
Volume Serial Number is 4EDE-41E1 

Directory of D:\tmp\kktmp 

14/07/2016 12:37 <DIR>   . 
14/07/2016 12:37 <DIR>   .. 
14/07/2016 12:06     0 Author Name - Book Title - The Billionaires Revenge.azw3 
14/07/2016 12:06     0 Author Name - Book Title - The Billionaires Revenge.epub 
14/07/2016 12:05     0 Author Name - Book Title - The Billionaires Revenge.htm 
14/07/2016 12:06     0 Author Name - Book Title - The Billionaires Revenge.mobi 
14/07/2016 12:06     0 Author Name - Book Title - The Billionaires Revenge.pdf 
       5 File(s)    0 bytes 
       2 Dir(s) 52,724,703,232 bytes free 
+0

概念中的優雅解決方案。但是與我所需要的相反。此解決方案將HTM文件轉換爲文件夾中其他任何文件的文件名,我需要做相反的操作並將所有其他文件與HTM文件相同的文件名。批文件不在同一文件夾中,並且只有一個文件具有相同的擴展名。 任何機會得到這個重命名所有其他文件,而不是htm文件? 在此先感謝。 Phaedrus 感謝 –

+0

你試過了嗎?它在這裏工作。 –

+0

只是爲了解釋它是如何工作的:第一行將變量'name'設置爲.htm文件的名稱。第二行將所有文件重命名爲名稱「name」及其原始擴展名。它'重命名'。htm文件,但這是完全無害的,因爲它使用完全相同的名稱進行重命名。 –