首页 > 解决方案 > 批处理 ren 命令以保留文件扩展名并使用“。”容纳文件名

问题描述

我有一个脚本重命名文件,保持其文件扩展名如下:

ren path\one.* two.*
ren path\three.* four.*

这适用于上面没有“。”的文件名。但是,当我有一个名称为“does.not.work”的文件时。使用脚本:

ren path\does.not.work.* test.*

它会将其重命名为“test.not.work.EXT”。

ren 命令在别处自动生成以重命名大量不同的文件。所以手动将脚本更改为:

ren path\does.not.work.txt test.txt

是不切实际的。如何构建 ren 代码以容纳包含“.”的文件?

标签: windowsbatch-filecmd

解决方案


使用 for 循环:

@echo off
for %%i in (does.not.work.*) do ren "%%~i" "test%%~xi"

显然,您可以使用单个 for 循环来为所有文件重命名实现此目的,有几种方法可以使用if语句,这意味着您将在 for 循环中设置变量,这是一种利用方法findstr和结果errorlevel重命名根据它找到的内容,您需要对其进行微调,因为搜索su也会匹配,sudo因此请继续阅读findstr /?以了解如何使用正则表达式或单词边界来获得准确的搜索结果:

@echo off
for %%i in (*) do (
    echo %%~ni | findstr "one" && ren "%%~i" "two%%~xi"
    echo %%~ni | findstr "three" && ren "%%~i" "four%%~xi"
    echo %%~ni | findstr "does.not.work" && ren "%%~i" "test%%~xi"
)

推荐阅读