我在嵌套文件夹中有一些文件,其名称中有一些点,我想将它们转换为空格。例如转换
802.11.Wireless.LAN.Fundamentals.Cisco.Press.eBook-kB.pdf
到
802 11 Wireless LAN Fundamentals Cisco Press eBook-kB.pdf
请注意,不应删除扩展的最后一个点(此处为PDF之前),因此我无法使用this script来执行此任务。
答案 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 /?
获取所有可用选项的帮助 - 它是一个功能强大的实用程序: - )