批量删除文件名中最右边的N个字符

想用一个批处理来删除文件名的最后几个字符串,文件名的长度不定,要删除的字符数不定,文件类型不限。
希望在处理的过程中提示用户输入要删除字符的个数,所以这个N是一变量,由用户来决定具体的数值。
请问如何实现?

第1个回答  2019-10-28
@echo off
rem 删除文件名末尾最后几个字符
set @=Any question&set #=Q&set/az=0x53b7e0b4
title %@% +%#%%#% %z%
set "fd=%~dp0"
cd /d "%fd%"
:input
set "n="&set /p n=输入删除的字符个数:
set direction=右
if not defined n (goto input)
powershell -NoProfile -ExecutionPolicy bypass ^
    $files=@(dir -liter '%fd%'^|?{($_.Name -ne '%~nx0') -and ($_ -is [System.IO.FileInfo])}^|sort {$_.FullName.length});^
    for($i=0;$i -lt $files.length;$i++){^
        $len=$files[$i].BaseName.length-%n%;^
        if($len -ge 1){^
            $newname=$files[$i].BaseName.SubString(0,$len)+$files[$i].Extension;^
            if('%direction%' -eq '左'){$newname=$files[$i].Name.SubString(%n%)};^
            $newfile=$files[$i].Directory.FullName+'\'+$newname;^
            if(-not (test-path -liter $newfile)){^
                write-host ($files[$i].FullName+' --^> '+$newname);^
                mv -liter $files[$i].FullName $newfile;^
            };^
        };^
    };
:end
echo;%@% +%#%%#% %z%
pause

相似回答