我有这种文件命名系统
CR – Plan – Grundriss_RO_STA_MA_C7_TS_0001_01_F – Plan Nord.pdf
我想有一个.bat文件,删除前后的部分,并更改文件名称
Grundriss_RO_STA_MA_C7_TS_0001_01_F.pdf
之前和之后的部分不总是有相同的长度!
如果你能帮忙,我会非常感激! 非常感谢你。
你可以使用这个代码复制到一个批处理文件保存到文件目录下进行重命名。
@echo off for /F "delims=" %%I in ('dir /AD /B *-*-* 2^>nul') do ( for /F "tokens=3 delims=- " %%J in ("%%~nI") do ren "%%I" "%%J%%~xI" )
我建议在命令REN左边插入命令ECHO ,然后在命令提示符窗口中运行批处理文件,当前目录是要重命名文件的目录,首先验证文件是否将按照您的预期重命名。 如果一切看起来都正确,则使用发布的代码运行批处理文件。
外部FOR循环运行DIR以仅获取文件名列表,因为文件名中至少有两个破折号的文件的参数/AD
(无目录)和/B
(裸输出格式)。 "delims="
使用空格和水平制表符分隔符来禁用将DIR的每个输出行分割为字符串的缺省设置。
内部FOR循环只处理每个文件的名称,而不用%%~nI
用双引号引用文件扩展名。 对这个任务感兴趣的只是两个空格和破折号之后的文件名的第三部分。 这就是"tokens=3 delims=- "
。
命令REN将DIR所返回的当前文件重命名为第三部分,并用%%~xI
引用原始文件扩展名。
由于文件名称包含空格,因此必须使用双引号引用文件名。
为了理解使用的命令及其工作方式,请打开命令提示符窗口,在其中执行以下命令,并仔细阅读为每个命令显示的所有帮助页面。
dir /?
echo /?
for /?
ren /?
2^>nul
重定向由命令DIR输出的错误消息来处理STDERR ,以防没有匹配模式*-*-*
的设备NUL发现文件压制它。 重定向操作符>
必须在这里用^
转义,以便在执行命令DIR时被解释为重定向操作符,而不是在命令FOR中被错误放置的重定向操作符。 另请参阅Microsoft文章使用命令重定向操作符 。