home wiki.fukuchiharuki.me
Menu

キーワード

  • Windows
  • bat
  • tsv

したいこと

tsvを読んでファイルをコピーしたい、バッチで。

tsvには次のような感じでコピー元とコピー先が定義されているとする。

path\to\コピー元ファイル1	path\to\コピー先ファイル1
path\to\コピー元ファイル2	path\to\コピー先ファイル2
...

どうやって

こう書いた。

@cd /d %~dp0
@echo off

set FOLDER_SRC=C:\path\to\コピー元ルートフォルダ
set FOLDER_DST=C:\path\to\コピー先ルートフォルダ

rem ### main
for /f "delims=	 tokens=1,2" %%i in (filelist.tsv) do (
	set FILE_SRC=%FOLDER_SRC%\%%i
	set FILE_DST=%FOLDER_DST%\%%j
	call :CopyFile
)
exit /b

rem ### copy file
:CopyFile
if exist "%FILE_SRC%" (
	copy /y "%FILE_SRC%" "%FILE_DST%" > nul 2>&1
) else (
	echo "%FILE_SRC%" 1>&2
)
exit /b

ちなみに

久しぶりにWindowsバッチなのでかなり手こずった。。特に「@echo off」に気がつくまでは、なんで動かないでテキスト出力されるのかと戸惑った。

いろいろ脆いけど、ファイル収集用なので気にしない。

参考