File 使用CMD从文件夹中的文件名中删除最后2个字符

File 使用CMD从文件夹中的文件名中删除最后2个字符,file,batch-file,cmd,filenames,File,Batch File,Cmd,Filenames,嗨,我正在尝试替换每个文件名末尾的_C。我曾经 @回音 任* 这很好,但文件名宽度可能不同,因此我还可以做些什么来仅选择最后2个字符并重命名它?您可以使用环境变量的增强扩展,例如: %PATH:~0,-2% 将提取路径变量的最后2个字符以外的所有字符。 有关详细信息,请查看set命令的帮助 您可以使用FOR命令将其应用于每个文件。不要忘记在循环中使用延迟扩展(使用感叹号而不是百分比) FOR /F %I IN ('dir *.* /B') DO ( set a=%~nI ren %I !a:~

嗨,我正在尝试替换每个文件名末尾的_C。我曾经 @回音 任*


这很好,但文件名宽度可能不同,因此我还可以做些什么来仅选择最后2个字符并重命名它?

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

%PATH:~0,-2%
将提取路径变量的最后2个字符以外的所有字符。 有关详细信息,请查看set命令的帮助

您可以使用FOR命令将其应用于每个文件。不要忘记在循环中使用延迟扩展(使用感叹号而不是百分比)

FOR /F %I IN ('dir *.* /B') DO (
set a=%~nI
ren %I !a:~0,-2!%~xI
)
有关详细信息,请查看命令的帮助

更新:我修改了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"
))

我无法理解代码。请你解释一下。当我粘贴这个时,我没有得到任何输出CMD@adr0327第一个FOR循环只是一个例子,我没有直接在CMD中测试它。现在我创建了更有用的脚本,其中包括解释注释。