2014-01-10 3 views
0

행복한 금요일 생각 - 탱크! 배치 .BAT 스크립트에 대한 도움이 필요합니다. 특히 "IF 문 구문"에 대한 도움이 필요합니다.배치 스크립트 도움이 필요합니다

파일 이름을 바꾸는 스크립트가 있습니다. 두 개의 파일이 있습니다. 하나는 4 자리로 끝나고 다른 하나는 5 자리로 끝납니다. 파일은 이전에 스크립트에서 미리 설정 한 변수로 이름이 바뀝니다. 그래서 여기

는 시나리오 : 우리는

C에있는 디렉토리에이 개 파일이 : 사용자 \ \ 테스트 디렉토리 사용자 이름 \ 바탕 화면 \

테스트 디렉토리 내에서 두 개의 파일이 있습니다

file1.12345

file2.1234

4 자리 결말은 하나의 변수 유형 (VAR1)이지만 다섯 자리로 끝나는 파일은 다른 변수 유형 (VAR2)입니다.

A) 와일드 카드 가능한 경우)를 사용하지 않고 선택한 디렉토리에있는 모든 파일 (들) (읽기 :

나는 if 문에 필요합니다. b) "."기호 다음에 오는 자릿수를 기준으로 결정하십시오. 사용할 변수. c) 일단 결정을 내리면 파일 이름이 적절한 변수로 바뀝니다.

가 최종 재 명명 규칙 그래서입니다 : yyyymmddtype.1234/12345

그래서 기본적으로는 이미 생성 된 날짜 스탬프 변수를 사용하는 것이, 이미 생성 된 유형 변수는 if 문에 의해 주입 될 수 있습니다 파일의 원래 끝자리를 추가하십시오.

나는 이것이 많은 것처럼 보이지만 더 많은 bash 스크립트 녀석입니다. 나는 모든 요소를 ​​가지고 있으며, if 문과 if 루프를 필요로합니다.

도움이 될 것입니다.

감사합니다.

답변

0

죄송합니다. 원하시는 옵션이 아닙니다. 대신 확장 적합성에 대한 각 파일을 검사 전체 목록 반복의 변수 목록을 반복합니다

for %%v asociated "유형"과 일치하는 파일의 이름을 변경, 파일 목록을 필터링 할 패턴 목록을 반복, for %%a는 분할한다 패턴 및 형식 변수의 내용은 for %%f는 파일리스트를 생성하는 대응하는 "타입"

출력 콘솔 명령 명령이 echo으로 앞에 바꾸기와 일치하는 파일을 검색 패턴을 이용 findstr으로 필터링하고 이름을 변경한다. 출력이 올 바르면 echo을 제거하여 파일의 이름을 바꿉니다.

@echo off 

    rem Variables defined elsewhere 
    set "folder=c:\somewhere" 
    set "timestamp=yyyymmdd" 

    rem Rename pattern variables in the form pattern;type 
    set "var1=\.....$;type1" 
    set "var2=\......$;type2" 

    set "var1=\.[^.][^.][^.][^.]$;type1" 
    set "var2=\.[^.][^.][^.][^.][^.]$;type2" 


    setlocal enableextensions disabledelayedexpansion 

    for %%v in ("%var1%" "%var2%") do for /f "tokens=1,* delims=;" %%a in ("%%~v") do (
     for /f "tokens=*" %%f in ('dir /a-d /b "%folder%" ^| findstr /r /c:"%%~a"') do (
      echo ren "%folder%\%%~f" "%timestamp%%%~b%%~xf" 
     ) 
    ) 

    endlocal 
+0

야를! 니가 근처에 있었다면 나는 맥주 한 잔 살께! – NerdyBird

0
@ECHO OFF &SETLOCAL 
set "yyyymmdd=yyyymmdd" 
set "VAR1=VAR1" 
set "VAR2=VAR2" 
for /f "delims=" %%a in ('dir /b /a-d^|findstr /re ".*\....."') do echo(ren "%%~a" "%yyyymmdd%%VAR1%%%~xa" 
for /f "delims=" %%a in ('dir /b /a-d^|findstr /re ".*\......"') do echo(ren "%%~a" "%yyyymmdd%%VAR2%%%~xa" 

이 작업을 얻을 수 echo(를 제거합니다.

0

난 당신이 다음이 각각에 대해 미리 설정된 변수를 사용하여 두 파일의 이름을 바꿉니다 이해한다면 :

for %%a in ("%userprofile%\Desktop\test-dir\*") do (
    if "%%~xa"==".12345" ren "%%a" "%variableA%-%variableB%%%~xa" 
    ) else (
    ren "%%a" "%variableC%-%variableD%%%~xa" 
    ) 
)