blog

 Shinya Oba 2017.11.23

「Windows上でファイルリストを生成するバッチを作ってみた」のメイン画像

Windows上でディレクトリツリーからファイルリストを作成したい場合のバッチを作ってみました。


用途

以下のようなディレクトリをCSVで出力する

-----------------------
ディレクトリツリー
-----------------------

/htdocs
└ dir
  └ file1.txt
  └ file2.txt
└ inc
  └ dir
    └ file3.txt

-----------------------
CSV
-----------------------
/htdocs/dir/file1.txt
/htdocs/dir/file2.tct
/htdocs/inc/dir/file3.tct

まあ、ピンポイントでしか使いませんが、
Web系の人が既存のサイトからファイルリストを作りたい人向けですかね。


Linux系であれば簡単なのですが、
今回はWindowsで。

上記の例でいうと、バッチファイルはhtdocsと同じ階層に置いて実行すれば大丈夫です。

echo "CSV出力用バッチ"

rem 変数定義
set TMPD=tmp

rem ---------------------------
rem 生成されたパスを変更する①
rem ---------------------------

rem 変数定義
set INFILE=in_update.csv
set OUTFILE=out_update.csv
set BSTR=%CD%
set ASTR=

rem 一時フォルダ作成
mkdir %TMPD%

rem htdocs配下とmlc配下の一覧を生成
dir htdocs /b /a-d /s > %TMPD%%INFILE%

rem 置換(htdocs以前を削除)
setlocal enabledelayedexpansion
for /f "delims=" %%A in (%TMPD%%INFILE%) do (
    set line=%%A
    echo !line:%BSTR%=%ASTR%!>>%TMPD%%OUTFILE%
)
endlocal


rem ---------------------------
rem 生成されたパスを変更する②
rem ---------------------------

rem 変数定義
set INFILE=%OUTFILE%
set OUTFILE=filelist.csv
SET BSTR=
set ASTR=/

rem 1行目を挿入
echo FileList>%OUTFILE%

rem 置換(をスラッシュに変換)
setlocal enabledelayedexpansion
for /f "delims=" %%A in (%TMPD%%INFILE%) do (
    set line=%%A
    echo !line:%BSTR%=%ASTR%!>>%OUTFILE%
)
endlocal

rem 一時フォルダ削除
rd /s /q tmp

exit

Shinya Obaの画像

Shinya Oba