我有一堆檔案:
CAR_003.dat
CAR_003.obj
CAR_004_prev0.png
CAR_004_prev1.png
CAR_004_tex0.tga
我需要將它們重命名為:
CAR_002.dat
CAR_002.obj
CAR_003_prev0.png
CAR_003_prev1.png
CAR_003_tex0.tga
如何在 Windows 上批量使用 cmd 執行此操作?
uj5u.com熱心網友回復:
您需要在您想要的目錄中執行以下批處理。
它將重命名樹中的所有內容。
@ECHO off
SETLOCAL EnableDelayedExpansion
FOR /R %%f in (CAR*) DO (
FOR /F "usebackq tokens=1,2,* delims=_" %%m in ('%%~nxf') do (
SET filePath=%%~dpf
SET filePrefix=%%m_
SET /a fileNumber=1%%~nn-1001
SET fileNumber=000!fileNumber!
SET fileNumber=!fileNumber:~-3!
SET filePosfix=%%~no
SET fileExt=%%~xf
IF [!filePosfix!] EQU [] (
SET fileRest=%%~xf
) ELSE (
SET fileRest=_!filePosfix!!fileExt!
)
REM ECHO %%f
REM ECHO !filePath!!filePrefix!!fileNumber!!fileRest!
REM ECHO ~~~~~~~
MOVE "%%f" "!filePath!!filePrefix!!fileNumber!!fileRest!"
)
)
uj5u.com熱心網友回復:
對百、十和單位使用 0-9 回圈...
撰寫[h][t][u]可用于隔離回圈檔案的正則運算式 ( )
應用減法和子字串以獲取目標名稱
@echo off
cd /d "%~dp0"
setlocal enabledelayedexpansion
for /l %%h in (0,1,9)do for /l %%t in (0,1,9)do for /l %%u in (0,1,9
)do if exist .\"*_%%h%%t%%u*.*" call %:^) %%h%%t%%u "[%%h][%%t][%%u]"
%:^)
if /i "%~1" == "" (endlocal & goto :eOf)else set /a "_new=1%~1-1"
for /f "delims=" %%i in ('dir /b /a:-d .\* ^| findstr /er .*\_%~2.*
')do set "_name=%%~i" & call echo\ren "%%~i" "!_name:%~1=%_new:~-3%!"
exit /b
觀察:檢查重命名命令是否在輸出中正確組合,并為有效執行echo\從call echo\ren命令中洗掉..
')do set "_name=%%~i" & call echo\ren "%%~i" "!_name:%~1=%_new:~-3%!"
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/312621.html
