我有很多这样的文件:
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