2014-12-05 2 views
0

배치 파일을 많이 엉망으로 만들지는 않았지만 작업 환경을 고려할 때 이것이 유일한 해결책입니다.배치 및 정규식을 사용하여 파일 이름 바꾸기

우리는 다음과 같은 형식의 파일의 무리가 있습니다

ICN-A10-C-1-H-8X662-00001-A-05-U 
ICN-A10-C-1-H-8X662-00002-A-01-U 
ICN-A10-C-1-H-8X662-00003-A-00-U 
ICN-A10-C-1-H-8X662-00004-A-92-U 

을 그들은처럼 읽을 수 있도록 우리는 마지막 숫자 세트와 다음 하이픈을 제거해야합니다

ICN-A10-C-1-H-8X662-00001-A-U 
ICN-A10-C-1-H-8X662-00002-A-U 
ICN-A10-C-1-H-8X662-00003-A-U 
ICN-A10-C-1-H-8X662-00004-A-U 

A, 다시 * .bat 파일은 우리의 유일한 해결책처럼 보입니다.

도움을 주시면 감사하겠습니다.

답변

1

당신이 약간 이상한 트릭을 사용할 수 있습니다. 그런 다음, 원래의 확장자 나머지의 이름을 재 조립하고 hypens하여 점을 다시 변경 :

C:\> dir /B files 
ICN-A10-C-1-H-8X662-00003-A-00-U 
ICN-A10-C-1-H-8X662-00002-A-01-U 
ICN-A10-C-1-H-8X662-00001-A-05-U 
ICN-A10-C-1-H-8X662-00004-A-92-U 

C:\> test 
ren ICN-A10-C-1-H-8X662-00003-A-00-U ICN-A10-C-1-H-8X662-00003-A-U 
ren ICN-A10-C-1-H-8X662-00002-A-01-U ICN-A10-C-1-H-8X662-00002-A-U 
ren ICN-A10-C-1-H-8X662-00001-A-05-U ICN-A10-C-1-H-8X662-00001-A-U 
ren ICN-A10-C-1-H-8X662-00004-A-92-U ICN-A10-C-1-H-8X662-00004-A-U 
+0

+2는 모호하고 DOS에서는 이중 중첩 된 FOR 루프이다. – mnemotronic

0

이름을 바꾸려는 파일이있는 디렉토리에서 rename 명령을 사용할 수 있습니다.

rename 's/\d+-(?=\D*$)//' * 

위의 정규식은 숫자 플러스는 0 개 이상의 숫자가 아닌 문자 다음의 유일한 경우 다음 - 기호와 라인 앵커의 끝을 일치합니다.

Regex Demo

+0

'rename' 리눅스에서 사랑스러운 있지만 Cygwin에서 또는 gnuwin32없이 윈도우에 포함되지 않은 것. 'batch-file' 태그는 Windows 배치 스크립팅을위한 것입니다. 나는 당신의 제안을 잘못 할 수는 없다. 나는 자주 autofs를 통해 내 Windows 파일 시스템으로 돌아가서 Linux'rename' 유틸리티를 사용할 수 있도록 내 리눅스 상자에 자주 ssh합니다. cygwin 버전에는 결코 운이 없었습니다. – rojo

+0

그래, 우리가 리눅스를 사용했다면. 하지만. :(정규식은 쉽다.) – zedkineece

1

죄송합니다, 정규식

for /f "tokens=1-11 delims=-" %%a in (' 
    dir /b /a-d * 
') do if "%%k"=="" if not "%%j"=="" (
    echo ren "%%a-%%b-%%c-%%d-%%e-%%f-%%g-%%h-%%i-%%j" "%%a-%%b-%%c-%%d-%%e-%%f-%%g-%%h-%%j" 
) 

이름 바꾸기 작업은 콘솔에 에코됩니다. 출력이 올 바르면 echo 명령을 제거하십시오. 이다

@echo off 
setlocal enabledelayedexpansion 

cd files 
for %%a in (*) do (
    set "name=%%a" 
    for %%b in ("!name:-=.!") do for %%c in ("%%~Nb") do (
     set "newName=%%~Nc%%~Xb" 
     ECHO ren %%a !newName:.=-! 
    ) 
) 

는, .에 의해 -을 변경하고 명령 지난 2 개 확장을 제거하기위한 중첩 된 두를 사용

관련 문제