그냥 저녁시간 가벼운 잡담입니다.

인코딩 하시는 분들 중 시리즈물을 한번에 인코딩 하는 경우 동일한 스크립트를 숫자만 바꿔서 연달아 작성해야 하는데 이게 여간 불편한게 아닙니다. 메모장으로 숫자만 바꿔서 다른 이름으로 저장하기를 반복해야 하니까요. 그래서 제가 생각해봤는데 for 구문과 echo 명령어를 활용하면 손쉽게 해결할 수 있습니다.

일단 아래와 같이 단순한 AVS 스크립트를 예로 들어 보겠습니다.

DirectShowSource("1.grf", fps=23.976, audio=false)
crop( 2, 0, -2, 0)
LanczosResize(1280,720)


위와 같은 스크립트를 2.grf, 3.grf, 4.grf, ... 에 대하여 반복해서 계속 만들어야 한다면 매우 귀찮겠지요. 20.grf 까지 있다고 가정하고 1.avs부터 20.avs까지 만들어 보겠습니다.

@echo off
for /L %%a in (1,1,20) do echo DirectShowSource("%%a.grf", fps=23.976, audio=false) > %%a.avs
for /L %%a in (1,1,20) do echo crop( 2, 0, -2, 0) >> %%a.avs
for /L %%a in (1,1,20) do echo LanczosResize(1280,720) >> %%a.avs
exit


위와 같이 스크립트를 작성하여 CMD 파일로 저장한 다음 실행하면 20개의 avs 파일이 순식간에 생성됩니다.

for 다음에 있는 /L 옵션은 괄호 안의 (1,1,20)과 관련이 있습니다. (1,1,20)은 1부터 1을 더해가면서 20까지 반복한다는 말입니다. 만약 (5,-1,0) 이라고 적으면 5, 4, 3, 2, 1, 0을 의미하겠지요?

%%a는 제가 적은 임의의 변수인데 일반 커맨드에선 %를 1개만 쓰고 배치스크립트에선 2개를 사용합니다.

끝에 %%a.avs로 출력을 해주는데 > 한개는 기존 파일이 있어도 새로 덮어쓰게 되고 >> 두개는 기존 파일이 있으면 내용을 추가하게 됩니다.

무슨소린지 잘 모르시는 분들도 계시겠지만 그냥 저렇게도 할 수 있다는 잡담이었습니다.
신고
Share
  1. BlogIcon 짱닌텐도
    2010.05.28 22:08 신고

    1빠에요^^
    스누피님은 이런것들 어디서 알아오시는지...?

    • BlogIcon snpbox
      2010.05.29 11:52 신고
      수정 및 삭제

      그냥 뒤에 /? 붙이면 사용법이 나오니까요 ;;

    • BlogIcon 짱닌텐도
      2010.05.29 18:23 신고
      수정 및 삭제

      그래도 이렇게 응용을 잘하시고 알기 쉽게 설명 해주시는것 보니까 스누피님은 장차 MS 같은 회사 세우실듯^^
      책 나오면 빨리 알려주세요~

  2. 2빠
    2010.05.29 03:54 신고

    박지성 선수가 말한 것이면... 그것은 진리다.
    스누피님이 말한 것이면... 그것도 진리다.

  3. BlogIcon babochi_sm
    2010.05.30 01:32 신고

    쉘 스크립트 인가요? '~';; 리눅스시간에서 배웠는데.. 윈도우에서는 잘 못봐서요..^^;

  4. mensa
    2010.06.08 14:03 신고

    시리즈물 인코딩할때 정말 좋은 팁인거 같습니다.
    감사드립니다. 진작 왜 이런방법을 생각 못했는지...!!!

  5. decc
    2010.07.21 21:30 신고

    음.. 그럼 grf는 20개 다 만들어놔야하는건가요?
    grf도 이런식으로 하는방법 없을까요

  6. BlogIcon yohimbine
    2011.05.05 11:29 신고

    렇게 응용을 잘하시고 알기 쉽게 설명 해주시는것 보니까 스누피님은 장차 MS 같은 회사 세우실듯^^

  7. BlogIcon dating
    2011.05.31 19:26 신고

    tattertools에서 데이터를 백업받아 티스토리에서 복원을 시도하였었습니다. 그런데 두시간이 지나도 복원이 완료되지 않아서 그냥 웹페이지를 닫아버렸었는데요, 그 이후로 '관리자>환경설정>데이터관리'에 들어가면 아무 것도 표시가 되지 않습니다. 혹시나 해서 다른 블로그를 만들어보았는데도 마찬가지구요. 정상적으로 표시되게 수정할 수 있을까요?

  8. BlogIcon kreditkort
    2011.05.31 19:27 신고

    블로그 파일이 그냥 깨졌다고 하면서 복구가 안되네요. <textarea>태그를 <pre>태그로 몽땅 고쳐야 할 일이 있어서 백업시킨 후 백업파일에서 고친 후 하는데, 원본파일이나 고친파일이나 둘다 복구가 안됩니다. 파일크기가 38메가여서 berryz WebShare를 이용하는데, 공유기라서 80, 23번 포트 다 열어놓고 해 봤지만 복구가 아예 안되는군요 -_-; URL도 복호화된 형식까지 전부 해봤습니다만 안됩니다. 복구시 또 다른 주의사항이 있나요?

  9. BlogIcon jaktfilmer
    2011.05.31 19:28 신고

    블로그의 비정상적인 데이터는 '데이터 교정'을 통해 교정할 수 있습니다. 비밀번호를 입력한 후 <교정> 버튼을 클릭해주세요. 비정상적인 글자가 데이터에 포함되어 있는 경우 이를 수정합니다. 댓글/트랙백/방명록의 데이터를 교정하며, 글 개수나 페이징 등의 데이터도 다시 계산하여 정확하게 반영합니다.

  10. BlogIcon värdering hus
    2011.05.31 19:31 신고

    비퍼플님도 멋진 로고 하나 만들어보세요~

  11. 데이터는 '데이터 교정'을 통해 교정할 수 있습니다. 비밀번호를 입력한 후 <교정> 버튼을 클릭해주세요. 비정상적인 글

  12. 나그네
    2013.09.24 18:31 신고

    질문있습니다
    for문을 하나만 써서 ( () 문자로 감싸서 ) 표현할 수는 없을까요
    제가 시험삼아해봤는데 안되더라구요
    그래서 환경변수에 등록해봤는데도 안되서 혹시 방법이 있지않을까해서 여쭤봅니다
    블로그 참 알차네요

    • BlogIcon snpbox
      2013.09.24 23:01 신고
      수정 및 삭제

      for 문에서 전체 괄호를 열고 닫기 때문에 중간에는 괄호가 들어가면 안 되는데 3줄 모두 괄호가 들어가는 형태입니다. 따라서 괄호를 캐럿 문자로 Escape 시켜줘야 합니다.

      @echo off
      for /L %%a in (1,1,20) do (
      echo DirectShowSource^("%%a.grf", fps=23.976, audio=false^) > %%a.avs
      echo crop^( 2, 0, -2, 0^) >> %%a.avs
      echo LanczosResize^(1280,720^) >> %%a.avs
      )
      exit

  13. 나그네
    2013.09.25 02:55 신고

    오호라 캐럿문자가있었군요 왜 저생각을 못했을까요
    전 또 커맨드라인에 for명령을 쓰면서 배치파일을 불러올까. 아니면 forfiles를 사용해볼까도 생각해봤는데
    이런 간단한방법이 있었다뉘 역시 스누피님이시군요 감사합니다