如何删除一组文件中除最后 10 个字符之外的所有字符

如何删除一组文件中除最后 10 个字符之外的所有字符

我如何重命名一组文件,例如

admin_ball_126608454.gma
another_thing_384157357.gma

ds_126608454.gma
ds_384157357.gma

答案1

您可以尝试这个脚本。每次要重命名文件时,它都会提示您。您可以通过从脚本中删除 IF..ELSE 子句来消除此行为。添加提示是为了确保您不会意外重命名文件夹或使用任何错误的名称重命名文件

@echo off
setlocal EnableDelayedExpansion
SET /P path=Enter the path please :
ECHO The Path entered is %path%. 
CD %PATH%
ECHO Current Directory is %CD%
FOR /R %path% %%G IN (*.*) DO (
SET name=%%~nG
SET last=!name:~-10!
SET/P cho="ECHO File !name!%%~xG will be renamed to ds_!last!%%~xG Do you want to continue (y/n) ?"
IF !cho!==y  (REN "!name!%%~xG" "ds_!last!%%~xG") ELSE (ECHO Not Renamed)
)
pause

答案2

您可以使用子字符串或正则表达式。附加-whatif以进行测试运行 - 但不会更改任何内容。我相信在 PowerShell 中还有很多方法可以做到这一点

子字符串

Dir "C:\yourfolder"  | ren -NewName {
    "ds" + $_.basename.substring($_.basename.length-10,10) + $_.extension
} -whatif

使用前瞻的正则表达式

Dir "C:\yourfolder" | ren -NewName {$_.name -replace "^.*(?=.{10}\.)","ds"}

我们使用展望 (?= )匹配^.?最后 10 个字符之前的所有内容.{10}

使用捕获组的正则表达式

Dir "C:\yourfolder" | ren -NewName {$_.name -replace '(.*)(.{10}\.)', 'ds$2'}

我们使用两个捕获组 (...)(...)并只保留第二个$2。在这里你必须使用'而不是"

相关内容