Показать полную графическую версию : [решено] переименование по индексу
icq99999999
16-04-2016, 14:42
есть скрипт на паскале для переименования по индексу:
var
I: Integer;
begin
I := I + 1;
FileName := IntToStr(I);
end.
как сделать то же самое в bat?
вот мой код , но он работает не очень :
Dir C:\Users\user\Desktop\JJ /a:-d /b /o:n > Sort_files.txt
For /F "usebackq tokens=* delims=" %%i In ("Sort_files.txt") do (
ECHO %%i
rem for /l %%1 in (1,1,25) do ren "%folder%\%%i" "%%1.jpg"
)
)
Примерно так (не проверялось):
@echo off
setlocal enableextensions enabledelayedexpansion
set /a iCount = 0
pushd "%UserProfile%\Desktop\JJ" && (
for /f "usebackq delims=" %%i in (
`2^>nul dir /b /a:-d /o:n "*.*"`
) do (
set /a iCount += 1
ren "%%~i" "!iCount!.%%~xi"
)
popd
)
endlocal
exit /b 0
На самом деле этот код не вполне корректен при определённых условиях. Если исходные имена файлов будут выглядеть как «1.ext», «2.ext» и т.п. — может получиться ситуация, что мы пытаемся дать файлу имя уже существующего файла. Потому правильный путь заключается в переименовании с одновременным перемещением во временную папку, а затем перемещением сразу всех переименованных файлов обратно (либо наоборот — сначала перемещение во временную папку. затем переименование файла с одновременным возвратом в исходную папку).
icq99999999
16-04-2016, 17:01
код работает, но почему-то файлы не по порядку.
Foreigner
16-04-2016, 17:50
icq99999999, Это последствия сортировки. В вашем случае надо брать значения из скобок:
@echo off
for /f "tokens=1,2 delims=()" %%i in ('dir /b') do 2>nul ren "%%i(%%j)" "%%j.jpg"
но почему-то файлы не по порядку. »
Именно что строго по порядку.
P.S. Освойте «Alt-PrintScreen».
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.