使用CMD

时间:2015-04-28 22:59:33

标签: file batch-file cmd filenames

您好我正在尝试替换每个文件名末尾的_C。我用了 @echo关闭 REN ?????????。*

这样可以正常工作,但文件名宽度可能会有所不同,那么我还能做些什么来只选择最后2个字符并重命名呢?

1 个答案:

答案 0 :(得分:2)

您可以使用增强的环境变量扩展,例如:

%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循环并创建了可用的批处理代码(包括说明注释),这也适用于包含空格的长文件名。只需将其放入.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"
))