Windows bat:没有扩展名的文件(名称中的点问题)



起初:这不是一个重复的问题(我希望(。我搜索了很多,发现如何使用批处理文件在目录树中查找没有文件扩展名的文件?和查找和重命名没有扩展名的文件?,等等,但我有一个"小"附加问题。

我正在尝试重命名 Windows 10 上的多个(数千(jpg 文件。名称格式为"名称 (ABC(.jpg"或"多个名称 (ABC(.jpg"。我需要"某个名字.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",没有扩展名。

我知道问题在(*.(,只是不知道如何解决...

您的问题是将文件重命名为"%%a"会产生"A Name.Supercool" - 并且这"没有扩展名"。

啊 - 但它确实如此。文件名为"A Name",扩展名为".超级酷">

如果您将文件重命名为"%%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

Magoo 的答案更接近我问的,但文件名中存在特殊字符的问题。TessellatingHeckler发布了最好的方法作为评论,所以它在这里。批处理文件:

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

有了这个,我可以完美地同时处理.jpg和.png。谢谢大家。

最新更新