Windows 명령 프롬프트에서 파일을 한 줄씩 가져오기

하고 싶은 일


  • 파일에 나열된 지정된 이름으로 디렉토리 만들기
  • 만든 디렉토리 아래에 지정된 크기의 더미 파일 만들기

  • 요컨대



    makeFile.txt
    20190101 01
    20190101 02
    20190102 01
    20190115 01
    

    이렇게 공백으로 구분된 파일이 있다면 아래와 같이 C:\work 아래에 디렉토리를 만들고,
    C:¥work¥
         |-20190101
         |     |-01
         |     |-02
         |-20190102
         |     |-01
         |-20190115
               |-01
    

    또한 가장 깊은 디렉토리에 dummy1.txt ~ dummy5.txt를 만들고 배치.
    C:¥work¥
         |-20190101
         |     |-01
         |     |  |-dummy1.txt
         |     |  |-dummy2.txt
         |     |  |-dummy3.txt
         |     |  |-dummy4.txt
         |     |  |-dummy5.txt
         |     |-02
         |     |  |-dummy1.txt
         |     |  ~略~
         |     |  |-dummy5.txt
         |-20190102
         |     |-01
           ~略~
    

    수작업이라면 귀찮아서 수고가 걸리므로, 배치로 단번에 만들어 주자! 그리고. ^^

    1. 파일을 한 줄씩 불러오기


    for /f %%[アルファベット1文字] in ([ファイル名]) do ([処理])
    먼저 파일을 한 줄씩 읽고 공간을 구분하여 각 값을 가져 와서 변수에 저장합니다.
    @echo off
    
    rem makeFile.txtからスペースまで(1列目)をaに格納,2列目をbに格納
    for /f "tokens=1,2" %%a in (makeFile.txt) do (
      echo %%a
      echo %%b
      echo ----------
    )
    

    실행 결과
    20190101
    01
    ----------
    20190101
    02
    ----------
    20190102
    01
    ----------
    20190115
    01
    ----------
    

    "tokens=n"으로 n열째의 값을 취득해 줍니다. 이번은 1열째와 2열째를 취득하고 싶기 때문에 "tokens=1,2"라고 씁니다. 변수에 %%a만 쓰면 자동으로 b에 두 번째 값이 검색됩니다. 그 때문에 xyz등의 변수를 지정하는 것은 그만두는 편이 좋을 것입니다.

    공백이 구분됨
    만약 공백을 구분하지 않고 1행 전체를 취득하고 싶은 경우는 「delims」옵션을 붙입니다.
    @echo off
    
    rem makeFile.txtから1行全体を取得
    for /f "delims=" %%a in (makeFile.txt) do (
      echo %%a
      echo ----------
    )
    

    실행 결과
    20190101 01
    ----------
    20190101 02
    ----------
    20190102 01
    ----------
    20190115 01
    ----------
    

    만약 단락 문자가 공백이 아니고 「/」이면 "delims=/"라고 씁니다.

    for 루프를 사용하여 파일 내용을 한 줄씩로드

    2. 디렉토리 작성


    mkdir <ディレクトリ名>에서 만들 수 있습니다.
    위의 for 루프와 mkdir 명령으로 지정된 디렉토리를 만들 수 있습니다.

    mkdir.bat
    @echo off
    cd /d %~dp0
    
    setlocal enabledelayedexpansion
    rem makeFile.txtからスペースまで(1列目)をaに格納,2列目をbに格納
    for /f "tokens=1,2" %%a in (makeFile.txt) do (
        set dir1=%%a
        set dir2=%%a\%%b
    
        rem ディレクトリがなければ作成
        if not exist !dir1! (
            echo !dir1!のディレクトリを作成します
            mkdir !dir1!
            if not exist !dir2! (
                echo !dir2!のディレクトリを作成します
                mkdir !dir2!
            )
        ) else (
            if not exist !dir2! (
                echo !dir2!のディレクトリを作成します
                mkdir !dir2!
            )
        )
    )
    endlocal
    

    주의
    "setlocal enabledelayedexpansion"은 for 루프 내에서 값을 변경하기위한 놀라운 일입니다.setlocal enabledelayedexpansion ~ endlocal 에서 for 루프를 둘러싸자.
    또한 루프 내에서 변수를 사용하는 경우 %가 아닌!로 묶어야합니다.

    배치 파일로 루프 처리

    3. 지정된 크기의 더미 파일 만들기



    파일 작성은fsutil file createnew <ファイル名> <サイズ(byte)>로 할 수 있습니다.

    지정된 크기 더미 파일 생성 (Windows, Mac)

    이것을 for로 5회 돌려 줍니다.for /L %%[アルファベット1文字] in (開始,ステップ,終了) do ([処理])
    의외로 알려져 있지 않지만, 알고 있으면 편리한 FOR 명령

    mkdir.bat
    @echo off
    cd /d %~dp0
    
    setlocal enabledelayedexpansion
    rem makeFile.txtからスペースまで(1列目)をaに格納,2列目をbに格納
    for /f "tokens=1,2" %%a in (makeFile.txt) do (
        set dir1=%%a
        set dir2=%%a\%%b
    
        rem ディレクトリがなければ作成
        if not exist !dir1! (
            echo !dir1!のディレクトリを作成します
            mkdir !dir1!
            if not exist !dir2! (
                echo !dir2!のディレクトリを作成します
                mkdir !dir2!
            )
        ) else (
            if not exist !dir2! (
                echo !dir2!のディレクトリを作成します
                mkdir !dir2!
            )
        )
    
        set count=0
        for /L %%n in (0,1,5) do (
            set /a count=!count!+1
            fsutil file createnew !dir2!\dummy!count!.txt 1024
        )
    )
    endlocal
    

    이것으로 완성입니다.
    이번에는 1KB 더미 파일을 만들었습니다.

    4. 실행해보기





    오!



    오!



    오!

    할 수 있었습니다. 제대로 1KB가되고 있습니다
    이상입니다. 감사합니다.

    좋은 웹페이지 즐겨찾기