2017-06-09 67 views
1

起初:這不是一個重複的問題(我希望)。我搜索了很多,發現How to find files with no file extension in directory tree with a batch file?Find and rename files with no extension?等,但我有一個「小」的額外問題。Windows蝙蝠:沒有擴展名的文件(點名稱問題)

我試圖在Windows 10上重命名多個(數千)jpg文件。名稱格式爲「名稱(ABC).jpg」或「多個名稱(ABC).jpg」。我需要「Some Name.jpg」。

你有什麼試過?所以,很多事情,他們沒有真正的解決辦法,直到這個:

for /f "tokens=1-3 delims=)(" %%a in ('dir /b *.jpg') do @rename "%%a(%%b)%%c" "%%a" 
for /R %%x in (*.) do ren "%%x" *.png 

它工作正常的大多數文件,的除非有一個在名稱點。如果名稱類似於「A Name.Supercool(ABC).jpg」,則它將只是「A Name.Supercool」,沒有擴展名。

我知道這個問題是(*),只是不知道如何解決......

+2

「*你嘗試過什麼?很多東西,都不是真正的解決方案*」 - 然而在powershell中,真正的解決方案只是一個'gci * .jpg | ren -newname {($ _。basename -replace'\ s + \(。* \')')+「.png」}'離開。 – TessellatingHeckler

+0

更好的解決方案,謝謝。這可能是被接受的答案。 –

回答

1

你的問題是,重命名文件到「%%一個」生產「A Name.Supercool」 - 而且這個「沒有延伸」。

啊 - 但確實如此。文件名是「A名稱」,擴展名是「.Supercool」

如果您將文件重命名爲`「%% a %% c」,則名稱將變爲「A Name.Supercool.jpg」。

現在爲什麼在嘗試將文件重命名爲無擴展名後,然後將它們重命名爲*.png我不知道,而且不幸的是您不解釋。你爲什麼不簡單地將.png修改爲%%a - 如果那真的是你想要做的?

(順便說一句 - 的for /f ... dir...方法建立的文件的存儲器列表,然後重命名它們,所以它們不會被作爲可以與for %%x in (*.jpg)...發生再加工)


鑑於終端空間在名稱的問題,

for /f "tokens=1-3 delims=)(" %%a in ('dir /b *.jpg') do rename "%%a(%%b)%%c" "%%a%%c" 
SETLOCAL enabledelayedexpansion 
for /f "delims=" %%a in ('dir /b "* .jpg"') do (
SET "name=%%a" 
REN "%%a" "!name:~0,-5!.jpg" 
) 
endlocal 
+2

''多個名稱(ABC).jpg「'分割在parens上的名稱末尾有一個空格,如果你使用'.png',那麼你就會得到''Multiple Names .png'',其中有一個空格。我推測這就是爲什麼他們不這樣做。 – TessellatingHeckler

+0

我試過「%% a(%% b)%% c」「%% a %% c」,但它在擴展名之前放了一個空格,比如「A Name .jpg」(編輯:更好地說,空格保持不變那裏)。然後我做了它(首先使其無延伸,然後重命名)。對於一個知道該怎麼做的人來說,這可能是一個壞主意...... –

+0

將'%% a'傳遞給刪除尾部空格的子例程不是更好嗎?然後它可以只執行一次'ren %% a(%% b)%% c「」!name!.png「'。 – eryksun

1

Magoo的答案更接近我問,但有一個特殊字符在文件名稱的問題。 TessellatingHeckler發佈了最好的方法作爲評論,所以在這裏。批處理文件:

powershell -command "gci *.jpg | ren -newname { ($_.basename -replace '\s+\(.*\)') + '.jpg'};gci *.png | ren -newname { ($_.basename -replace '\s+\(.*\)') + '.png'}" 

有了這個,我可以一次處理.jpg和.png,完美無瑕。謝謝你們。