2016-12-26 1 views
0

나는 번호로 이름 .jpg 이미지 파일이 들어있는 폴더가 : 마지막 하나가되도록 내가 파일 이름을 반전시킬 수 방법배치 파일은 폴더에있는 파일의 이름을 변경하고 반대하는

1.jpg 
2.jpg 
... 
100.jpg 

을 첫 번째 예 :
100.jpg1.jpg 등이됩니까?

@echo off 
setlocal enabledelayedexpansion 

::get files count 
set count=0 
for %%x in (*.jpg) do (
set /a count+=1 
) 

::rename 
for /L %%a in (1,1,%count%) do (
set /a new=101-%%a 
ren "!new!.jpg" "temp.jpg" 
ren "%%a.jpg" "!new!.jpg" 
ren "temp.jpg" "%%a.jpg" 
) 
endlocal 

나는 총 파일 수 이상 (50)

어떤 도움을 이해할 수있을 것이다을 경우 % 개수 % + 1 이 코드가 실행되지 않습니다하기 위해 101을 변경했습니다. 미리 감사드립니다.

+0

https://stackoverflow.com은 무료 스크립트/코드 작성 서비스가 아닙니다. 지금까지 시도한 내용 (이미 사용하고있는 스크립트/코드 포함)과 문제가있는 부분을 알려 주시면 특정 문제를 해결하기 위해 노력할 수 있습니다. [좋은 질문을하는 법은 무엇입니까?] (https://stackoverflow.com/help/how-to-ask)도 읽어야합니다. – DavidPostill

+1

Magoo의 algorythm을 적용하는 방법은 for 루프가 카운트의 반을 반복하는 것만 필요합니다. – LotPings

답변

3
@echo off 
setlocal enabledelayedexpansion 
for /L %%a in (1,1,50) do (
set /a new=101-%%a 
ren "!new!.jpg" "temp.jpg" 
ren "%%a.jpg" "!new!.jpg" 
ren "temp.jpg" "%%a.jpg" 
) 

여기서 "temp.jpg"는 아직 존재하지 않는 파일 이름이 될 수 있습니다.

+1

좋은 하나, 가우스에서 생각 나게 ;-) – LotPings

+0

고마워요! 그것은 잘 작동하지만 그것은 100에서 시작하고 가장 큰 숫자로 시작하지 않습니다. – Amr

+1

@Amr 및 샘플에 무엇이 표시됩니까? – LotPings

1

번호가 매겨진 모든 jpg를 1..100뿐만 아니라 정렬 할 수도 있습니다.
숫자를 정렬하려면 숫자를 고유 한 길이로 가져와야합니다.

이 배치

@Echo off&SetLocal EnableExtensions EnableDelayedExpansion 
Set Base="X:\path\to\pic\folder" 
Set Ext=jpg 
Pushd %Base% 

Set Cnt=100000 
For /f "delims=" %%A in (
    'Dir /B /A-D *.%Ext% ^|findstr /i "^[0-9]*\.%Ext%$" ' 
) Do Set /A "FileNo=Cnt+%%~nA" & Ren "%%A" "!FileNo!.%Ext%" 
Set Cnt=0 
For /f "delims=" %%A in (
    'Dir /B *.%Ext% ^|findstr /i "^1[0-9][0-9][0-9][0-9][0-9]\.%Ext%$" ^|Sort /R ' 
) Do Set /A "Cnt+=1" & Ren "%%A" "!Cnt!.%Ext%" 

이후 (당신이 [0-9] 두 번째 루프는 FINDSTR에서의 수이 증가하지만, 설명 할 수있다) 수에 100,000을 추가하여이 작업을 수행 같은 이름이 (재) powershell 스크립트는 중간 단계를 사용합니다. 여기에 추가 임시 .tmp 확장자 :만큼 당신이 번호는 최대 1에서 연속 알고, 그리고라는 이름의 기존 파일이 없기 때문에

$Cnt=0 
gci *.jpg -file| 
    sort -Property @{expression={[int]$_.BaseName};Ascending = $False}| 
    ForEach { $cnt++ ; Ren $_ -newname $("$Cnt.jpg.tmp") } 
gci *.jpg.tmp -file | ForEach{ren $_ -newname $_.Basename} 
+0

벌금, 고마워요. 현재 작업 디렉토리를 사용하도록 업데이트했습니다. 기지 설정 = % CD % – Amr

1

* .jpg.temp :

@echo off 
setlocal enableDelayedExpansion 
for /f %%N in ('dir /b /a-d *.jpg^|find /c /v ""') do set max=%%N 
set N=1 
for /l %%N in (1 1 %max%) do (
    ren %%N.jpg !N!.jpg.temp 
    set /a N+=1 
) 
ren *.jpg.temp *. 

넘버링에 간격이있을 수 있지만 최종 결과가 인접하기를 원하면 LotPings이 설명하는대로 숫자순으로 정렬해야합니다. 나는 JSORT.BAT을 - 끼워 넣어 진 수를 숫자로 분류하는 기능이있는 잡종 배치 또는 JScript 분류 공용품을 사용할 것입니다.

@echo off 
setlocal enableDelayedExpansion 
set N=1 
for /f "delims=" %%F in ('dir /b /a-d *.jpg^|jsort /n /r') do (
    ren "%%F" !N!.jpg.temp 
    set /a N+=1 
) 
ren *.jpg.temp *. 
관련 문제