【发布时间】:2015-04-28 22:59:32
【问题描述】:
您好,我正在尝试替换每个文件名末尾的 _C。我用了 @echo 关闭 任. ?????????.*
这工作正常,但文件名宽度可能不同,所以我还能做些什么来仅选择最后 2 个字符并重命名它?
【问题讨论】:
标签: file batch-file cmd filenames
您好,我正在尝试替换每个文件名末尾的 _C。我用了 @echo 关闭 任. ?????????.*
这工作正常,但文件名宽度可能不同,所以我还能做些什么来仅选择最后 2 个字符并重命名它?
【问题讨论】:
标签: file batch-file cmd filenames
您可以使用环境变量的增强扩展,例如:
%PATH:~0,-2%
将提取除 PATH 变量的最后 2 个字符之外的所有字符。 更多详细信息,请查看 set 命令的帮助。
您可以使用 FOR 命令将其应用于每个文件。不要忘记在循环中使用延迟扩展(使用感叹号而不是百分比)。
FOR /F %I IN ('dir *.* /B') DO (
set a=%~nI
ren %I !a:~0,-2!%~xI
)
查看 FOR 命令的帮助以获取更多详细信息。
更新:我修改了 FOR 循环并创建了可用的批处理代码(包括解释 cmets),它也适用于包含空格的长文件名。只需将其放入 .bat 文件中,然后在需要重命名文件的目录中运行此批处理。 注意:在批处理文件中使用时,百分比需要加倍。
@echo off
rem use extensions and delayed expansion
setlocal ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
FOR /F "tokens=*" %%I IN ('dir *.* /B') DO (
rem Skip this batch
if "%0" NEQ "%%I" (
rem show renamed file
echo %%I
rem set A to filename without extension
set A=%%~nI
rem rename file to A minus last two characters with appended extension (which includes period)
ren "%%I" "!A:~0,-2!%%~xI"
))
【讨论】: