LoginSignup
24
25

More than 5 years have passed since last update.

WindowsOSコマンドによるファイル分割バッチ処理

Last updated at Posted at 2018-08-20

❏はじめに

ファイル分割をしたいという需要が最近芽生えたので、どうにかWindows環境でできないものか調査
やりたいことが実現できたのでめもめも

❏要求

  • 大容量ファイルを開きたい
  • 大容量ファイルを比較、差分がみたい
  • Windows環境のみで実現したい

❏実装

[split.bat]


@echo off

setlocal ENABLEDELAYEDEXPANSION

rem #======================================#
rem #            使い方
rem #======================================#

rem  ■以下の変数に任意のあたいを設定すること
rem  max        最大分割行数
rem  inputFile  分割対象ファイル(バッチファイルと同じディレクトリに存在するファイル名
rem             フルパスでもOKだが()やスペースがあると動作しない可能性あり



rem #======================================#
rem #            変数領域
rem #======================================#

set /a num=0
set /a fileNm=0
set /a max=1000
set /a fileCount=0

set inputFile=D:\work\bat\head\test.txt
type %inputFile% | find /v /c "" > line.log
for /f "usebackq tokens=*" %%i IN (`type line.log`) DO @set line=%%i
set /a fileCount=%line% / %max% + 1

echo ■■■■■■■■■■■■■■■■■■■■
echoecho ■ ファイル分割処理
echoecho ■■■■■■■■■■■■■■■■■■■■

echo 処理対象ファイル名:%inputFile%
echo 分割行数     :%max%echo ファイル行数   :%line%echo 出力ファイル数  :%fileCount%

for /f "usebackq eol= delims= skip=1 delims=" %%s in (%inputFile%) do @(
    set /a num=num+1

    echo %%s >> split_!fileNm!.txt
    rem echo !num!
    rem echo !max!

    if !num! equ !max! (
       echo split_!fileNm!.txt 書き込み完了
       set /a fileNm=fileNm+1
       set /a num=0
    )
)
:break

:end
echo .
echo 処理が完了しました!
echo .
pause

❏使い方

■以下の値を指定

  • max 最大分割行数
  • inputFile 分割対象ファイル(バッチファイルと同じディレクトリに存在するファイル名 フルパスでもOKだが()やスペースがあると動作しない可能性あり

❏出力

■■■■■■■■■■■■■■■■■■■■
■
■ ファイル分割処理
■
■■■■■■■■■■■■■■■■■■■■

処理対象ファイル名:test.txt
分割行数     :1000 行
ファイル行数   :62080 行
出力ファイル数  :63
split_0.txt 書き込み完了
split_1.txt 書き込み完了
split_2.txt 書き込み完了
split_3.txt 書き込み完了
split_4.txt 書き込み完了
split_5.txt 書き込み完了
split_6.txt 書き込み完了
split_7.txt 書き込み完了
split_8.txt 書き込み完了
split_9.txt 書き込み完了
...
.
処理が完了しました!
.
続行するには何かキーを押してください . . .

❏追記

以下のブログで紹介されている方法でもっと簡単に、一瞬でファイル分割処理ができました。。

  1. PowerShell立ち上げる
  2. 分割対象ファイルがあるフォルダに移動する
  3. $i=0; cat .\test.txt -ReadCount 3 | % { $_ > test$i.txt;$i++ } を実行

→ファイル分割完了!

調整するのはファイル名「.\test.txt」と ReadCountにしている分割行数のみ

※注意※ UNICODE文字 BOM付で出力される

今回はバッチファイルの勉強になったと思って、。

PowerShellもある程度かけるようになりたいと思いました。

でもやっぱり、linuxやunix環境があるなら、splitが楽ちんだと思います。笑

24
25
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
24
25