2017-06-09 65 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,完美无瑕。谢谢你们。