2012-07-16 2 views
1

파일 이름을 기반으로 한 폴더에서 여러 폴더로 파일을 복사하려면 배치 파일이 필요합니다. 파일 형식은 aBBccccc.txt이며 a와 ccccc는 중요하지 않지만 BB는 2 자 코드입니다. 예를 들어 파일 aQWertyu.txt aWErtyui.txt는 각각 QW 및 WE 폴더에 복사해야하며이 폴더는 스크립트에 의해 생성됩니다.파일 이름의 문자를 기반으로 파일을 복사하는 일괄 파일

FOR/f를 사용하는 예제 스크립트를 보았지만 파일을 구문 분석하고, 문자 2와 3을 검사 한 다음 폴더를 만들고 파일을 복사하는 방법을 볼 수 없습니다.

감사합니다.

답변

5

이 필요한 여러 부품 :

  1. 지연 확장. 이것은 아래의 루프 내에서 문자열을 얻을 필요 :

    setlocal enableextensions enabledelayedexpansion 
    
  2. 파일을 반복하는 for 루프

    for %%x in (*.txt) do (
    
  3. 관련 문자열 찾기 :

    set "filename=%%x" 
        set "folder=!filename:~1,2!" 
    

    주 여기서 !filename!의 사용. 이것은 지연된 확장을 사용하고 있습니다. 일반적으로 환경 변수는 %filename%으로 참조되지만 구문 분석 일 때 전체 루프가 확장되어 %filename%은 아무 것도 표시되지 않습니다. 지연된 확장은 !을 사용하여이를 해결합니다.

  4. 폴더 만들기 : 아직 존재하지 않는 경우

    if not exist !folder! mkdir !folder! 
    

    이 만 폴더를 만듭니다.

  5. 복사 파일 :

    copy "%%x" !folder! 
    ) 
    

는 모두 함께 퍼팅 :

@echo off 
setlocal enableextensions enabledelayedexpansion 
for %%x in (*.txt) do (
    set "filename=%%x" 
    set "folder=!filename:~1,2!" 
    if not exist !folder! mkdir !folder! 
    copy "%%x" !folder! 
) 
+0

정말 감사합니다 - 완벽! 'set "폴더 =! filename : ~ 1,2!"'1과 2에 대한 규칙은 무엇입니까? 1은 상수이고 그 다음 2 문자는 무엇입니까? – user1528218

+0

1은 부분 문자열을 시작하는 문자이고, 2는 길이입니다. – Joey

+0

생각해 보겠습니다. 그러나 사용하고자하는 문자가 2 문자 2의 위치에서 시작하거나 0 문자의 첫 문자로 시작하므로 2,2 문자가되지 않습니까? – user1528218

관련 문제