如何在Windows 7上批量重命名文件?

如何在Windows 7上批量重命名文件?

我有很多这样的文件:

simple-1.gif
simple-2.gif
simple-3.gif

我想使用命令提示符以相同的模式重命名它们,以便它们看起来:

aa1.gif
aa2.gif
aa3.gif

我尝试过这个:

ren simple-*.* aa*.*

但这就是我得到的

样品-1.gif

这不是我想要的。这其中有什么窍门?

答案1

以下是批处理示例:

@echo off

Title Rename Files Keeping the Numbers

for /f %%a in ('"prompt $H&for %%b in (1) do rem"') do set "BS=%%a"

:InfoPasta
cls
echo.
if exist "%~1" (if exist "%~1\" set "Pasta=%~1") else (set /p "Pasta=%BS% Please Inform the Folder: ")
If not exist "%Pasta%\" goto :PastaInexistente

set /p "Prefixo=%BS% Please set a prefix: "

set Digitos=0
set Contador=2
if exist "%~dp0temp.txt" del /q "%~dp0temp.txt"

pushd "%Pasta%"
:: NArquivos = Numero de Arquivos
for /f "delims=" %%a in ('dir /b *.*') do set /a NArquivos+=1
if %NArquivos% EQU 0 Exit
 
echo - %Date% - %time:~0,5%:>>"%~dp0rename.log"
echo.>>"%~dp0rename.log"

call :Digitos
for /f "delims=" %%a in ('dir /b *.*') do for /f "delims=0123456789" %%b in ("%%~a") do call :Numeros "%%~a" "%%~nb"


for /f "tokens=2,3 delims=;" %%a in ('type "%~dp0temp.txt"^|sort') do IF not exist "%%b" (
                                                                                           ren "%%a" "%%b"
                                                                                           echo "%%a" -^> "%%b">>"%~dp0rename.log"
echo "%%a" -^> "%%b"
                                                                                          ) else (call :Renomear "%%~a" "%%~b")
echo.>>"%~dp0rename.log"
if exist "%~dp0temp.txt" del /q "%~dp0temp.txt"
exit

:Digitos
call set Var=%%NArquivos:~%Digitos%,1%%
If not Defined Var goto :EOF
set /a Digitos+=1
goto :Digitos

:: NC = Nome Completo
:: NP = Nome Parcial
:: AP = Apenas Numeros

:Numeros
if "%~1"=="%~2" goto :EOF
set "NC=%~n1"
set "NP=%~n2"
call set "AP=%%NC:%NP%=%%"
set APZ=00000%AP%
call set "APZ=%%APZ:~-%Digitos%%%"
>>"%~dp0temp.txt" echo %Prefixo%%APZ%%~x1;%~1;%Prefixo%%AP%%~x1
goto :EOF

:PastaInexistente
echo.
echo  This Folder doesn't exist! "%Pasta%"
pause 2>nul | echo  Press a key | set /p=
goto :InfoPasta

:Renomear
IF not exist "%~n2 [%Contador%]%~x2" (
                                      ren "%~1" "%~n2 [%Contador%]%~x2"
                                      echo "%~1" -^> "%~n2 [%Contador%]%~x2">>"%~dp0rename.log"
echo "%~1" -^> "%~n2 [%Contador%]%~x2"
                                      goto :EOF
                                     )
set /a Contador+=1
goto :Renomear

在此处输入图片描述

答案2

使用 Powershell,使用以下 cmdlet:

Get-ChildItem -Filter 'simple-*gif' | Rename-Item -NewName {$_.FullName -Replace 'simple-', 'aa'}

答案3

另一个可能的选择。下面是一个批处理文件,改编自我之前在 Win10 上编写的代码。您只需要在开始时输入四个变量。它将搜索与 string3 中指定的模式匹配的所有文件名,然后将这些文件名中出现的所有 string1 替换为 string2。

作为额外奖励,它将执行安全检查以确保建议的新文件名不以空格或点开头或结尾,并在重命名之前将其剪掉。(例如,如果您使用此代码将下划线或破折号转换为空格,而原始文件名以 1 开头,则可能会发生这种情况)。

这不会重命名扩展。

请再次注意,这将用 string2 替换 string1 的所有实例,所以如果您不想使用就不要使用,例如将“simple-1simple-2”重命名为“aa1aa2”。

除了已经存在的变量之外,不要使用“s”来设置任何变量。

默认情况下,它仅回显重命名命令,但并不实际执行这些命令。一旦您确信它执行了您想要的操作,请删除 ren 命令之前的 echo。

如果您确实只想重命名以 string1 开头的文件名,请记住删除 string3 中指定的模式中的第一个星号。例如

set "str1=simple-"
set "str2=aa"
set "str3=simple-*.gif"

批处理文件:

@echo off
set "dir=source directory path"
set "str1=original string"
set "str2=replacement string"
set "str3=*%str1%*.*"

FOR /F "tokens=* USEBACKQ" %%F IN (`dir "%dir%\%str3%" /a:-d /b /s /-p`) DO (call:rename_sub "%%F")

set /p pause=paused
exit

:rename_sub
set "file=%~n1"
if not defined file exit /b
call set "file=%%file:%str1%=%str2%%%"

:rename_valid_check
if "%file%"=="%~n1" exit /b
if not defined file exit /b
if "%file:~0,1%"==" " (set "file=%file:~1%"
    goto rename_valid_check)
if "%file:~-1%"==" " (set "file=%file:~0,-1%"
    goto rename_valid_check)
if "%file:~0,1%"=="." (set "file=%file:~1%"
    goto rename_valid_check)
if "%file:~-1%"=="." (set "file=%file:~0,-1%"
    goto rename_valid_check)

echo ren %1 "%file%%~x1"
exit /b

相关内容