作成理由
- android端末にパソコンからテキストファイルを転送したい
仕様を詰める
- フォルダ以下の日本語ファイル名のテキストを探す
- 同一のファイル名がある場合は更新日時が新しい方を転送する
- ファイル転送には abd コマンドを使う
- 転送先のフォルダはあらかじめ準備しておく
- いったんバッチファイルに書き出してから実行する
バッチファイル
REM ファイル転送準備.bat
ruby -x "%~f0"
goto end
#!ruby
#encoding: utf-8
Encoding.default_external = 'UTF-8'
$stdout=open("tmp.txt","w")
$stderr=open("tmp.log","w")
h,s={},""
Dir.glob('**/*'){|f|
if %r|/[\p{Han}ぁ-んァ-ヴー0-9]*.txt$|=~f
if h[File.basename(f)].nil?
h[File.basename(f)]=f
elsif File.mtime(f)>File.mtime(h[File.basename(f)])
h[File.basename(f)]=f
end
end
}
h.each{|k,v| puts k+"=>"+v}
h.each{|k,v| s+=%Q|adb push "#{v}" "/sdcard/aozora/#{k}"\n|}
File.write("tmp.bat",s)
__END__
:end
注意点
- ruby 2.6.5p114 にて動作確認してます
追記
- 読み返してみるとifが多くって格好悪いって思ってちょっと修正
REM ファイル転送準備.bat
ruby -x "%~f0"
goto end
#!ruby
#encoding: utf-8
Encoding.default_external = 'UTF-8'
$stdout=open("tmp.txt","w")
$stderr=open("tmp.log","w")
h,s={},""
Dir.glob('**/*'){|f|
next if %r|/[\p{Han}ぁ-んァ-ヴー0-9]*.txt$|!~f
if h[File.basename(f)].nil? or File.mtime(f)>File.mtime(h[File.basename(f)])
h[File.basename(f)]=f
end
}
h.each{|k,v| puts k+"=>"+v}
h.each{|k,v| s+=%Q|adb push "#{v}" "/sdcard/aozora/#{k}"\n|}
File.write("tmp.bat",s)
__END__
:end
コメント