批处理文件,用文件名中的空格替换点

时间:2015-02-17 09:48:12

标签: batch-file

我在嵌套文件夹中有一些文件,其名称中有一些点,我想将它们转换为空格。例如转换

802.11.Wireless.LAN.Fundamentals.Cisco.Press.eBook-kB.pdf

802 11 Wireless LAN Fundamentals Cisco Press eBook-kB.pdf

请注意,不应删除扩展的最后一个点(此处为PDF之前),因此我无法使用this script来执行此任务。

3 个答案:

答案 0 :(得分:5)

@echo off
    setlocal enableextensions disabledelayedexpansion

    set "root=c:\some\where"

    for /r "%root%" %%a in ("*.?*.pdf") do (
        set "filename=%%~na"
        setlocal enabledelayedexpansion 
        for %%f in ("!filename:.= !") do (
            endlocal  
            echo ren "%%~fa" "%%~f%%~xa"
        )
    )

这将在指定的文件夹下递归搜索包含.pdf个扩展名的文件,其中包含至少两个点。对于找到的每个文件,文件名中的附加点(不包括扩展名)将替换为空格。

为避免文件名或路径中感叹号出现问题,启用延迟扩展(修改块内变量并访问更改后的值)以删除点并在执行重命名操作前禁用。

重命名操作仅响应控制台。如果输出正确,请删除echo

之前的ren命令

答案 1 :(得分:2)

未经测试:

@echo off

set "root_dir=c:\pdfs"

setlocal enableDelayedExpansion
for /r "%root_dir%" %%a in (*.pdf) do (
 set "fnm=%%~na"
 set "nfnm=!fnm:.= !"
 rem remove echo if everything looks ok
 echo ren "%%a" "%%~dpa!nfnm!%%~xz"

)

如果echoed命令正常,则需要更改root_dir并删除最后一行中的echo。掩码放到*.pdf

答案 2 :(得分:2)

我的JREN.BAT hybrid JScript/batch utility可以直接从命令行处理这个问题。它是纯脚本,可​​以在任何Windows机器上从XP开始本地运行。它使用正则表达式替换来重命名文件或文件夹。

jren "\.(?=.*\.)" " " /s /p "c:\yourRootPathHere"

该命令扫描所有文件名,替换名称后面至少有一个额外句点的所有句点。

因为JREN是批处理脚本,所以如果将命令放在另一个批处理脚本中,则必须使用call jren

使用jren /?获取所有可用选项的帮助 - 它是一个功能强大的实用程序: - )