PowerShell에 복사하는 것만으로 파일을 지정된 행 수로 분할 할 수있는 사람

6095 단어 PowerShellWindows10

무엇을 원하십니까?


  • MariaDB를 복제하고 있습니다.
  • 1 차와 2 차 간에 성공적으로 복제 할 수 있는지 확인하고 싶습니다.
  • 1 차와 2 차 모두에서 mysqldump 한 파일을 WinMerge로 차등 확인합시다!
  • 파일 당 행 수가 너무 많으면 WinMerge에서 비교할 수 없습니다 ... ( '· ω ·`)

  • 그래서 mysqldump 한 파일을 지정 행 수로 분할하고 싶습니다.

    copipe에서 사용할 수있는 스크립트



    선두의 「파일 패스」 「인코드」 「분할 행수」를 고쳐 써, PowerShell에 붙여 넣으면 사용할 수 있는 녀석을 만들어 보았습니다.
    $file_path = 'ファイルパス';
    $encode = 'UTF8'; #SJISなら『default』
    $row_size = 100; #分割行数
    $file_name = $(Get-ChildItem $file_path).BaseName;
    $file_extenstion = [System.IO.Path]::GetExtension($file_path);
    $parent_folder_path = Split-Path $file_path -parent;
    $i = 0;
    cat $file_path -ReadCount $row_size -Encoding $encode | % {
        $tmp_file_path = $parent_folder_path + '\tmp' + $i + $file_extenstion;
        $output_file_path = $parent_folder_path + '\' + $file_name + '_' + $i + $file_extenstion;
        $_ > $tmp_file_path;
        get-content -Encoding Unicode $tmp_file_path | Set-Content -Encoding $encode $output_file_path;
        Remove-Item $tmp_file_path;
        $i++;
    }
    

    이 스크립트의 조금 쓸모없는 사촌
  • 다시 인코딩을 위해 임시 파일에 출력하고 있습니다. (tmp라는 파일을 분할 할 수 없음)
  • 분할 원의 파일의 인코딩은 「UTF8」 「SJIS」만 대상.
  • 분할 후의 파일과 동명의 파일이 있으면 덧쓰기 된다.

  • 좀 똑똑하지 않아… (´・ω・`)
    어디까지나 개인용 푸치 툴입니다.

    실행하면 이런 느낌


  • 분할 원본 파일과 동일한 폴더로 분할 후 파일이 생성됩니다.
  • 분할 소스 파일은 그대로 유지됩니다.
  • 원본 파일 이름과 확장자를 상속하여 파일을 분할합니다.
  • 분할 후의 파일명에는 일련 번호가 붙습니다.



  • 왜 임시 파일로 출력하고 다시 인코딩하고 있습니까?


  • PowerShell의 기본 인코딩은 UTF-16입니다.
  • 상기를 위해 $_ >의 개소에서 출력되는 파일의 인코딩은 UTF-16이 되어 버린다.
  • 파이프 처리중에 encode를 지정하면 좋겠지만, 하는 방법 분별 어려웠다…(´・ω・`)

  • 타협해 임시 파일 출력하고 있습니다.

    뱀발



    범용성 갖게 하거나 예외 처리도 담고 싶다면 C#에서 exe 만드는 것이 좋다고 생각합니다.

    버전



    Windows10 Pro 버전 20H2 OS 빌드 19042.685
    PSVersion 5.1.19041.610

    좋은 웹페이지 즐겨찾기