はじめに
業務でファイルコピーをする単純なバッチファイルを作成していたところ、copyコマンドで1つ引っかかったので備忘録代わりに投稿でもしてみようかな、と思い立ちました。
※ベースはほぼ出来てたのに大分放置してた・・・。
copyコマンド
ファイルAを複写してファイルBを作る、というのは説明するまでもありません。
ワイルドカード
今回のポイント。これも今更説明するまでも無いですが、ワイルドカード(*、?)の用途としては
1.ファイル名が一部しか特定出来なくても指定出来る
ファイル_20171005.txt を指定したいが、可変部の日付部分「20171005」は特定できないので
copy ファイル*.txt ファイル.txt
のようにすると日付部分から拡張子の前までがどんな文字でも指定出来ます。
2.条件に一致する複数のファイルをコピー元に指定出来る
同ディレクトリ上に、ファイルA.txt・ファイルB.txt が存在する場合
copy ファイル*.txt ファイルC.txt
を実行すると、ファイルA.txtとファイルB.txtの内容が結合されたファイルC.txtが作成されます。
fileA
fileB
↑の2ファイルの内容が結合されて
fileA
fileB
問題点
実際に作成されたファイルを確認してみると、何故か最後に半角スペースが付与されています。
ちなみに上記例では元ファイルの最後に改行があるため、ファイルCの3行目が半角スペースのみの行になります。
元ファイルに改行が無ければ
fileAfileB
のように1行目の最後に半角スペースが付与されます。
(見た目でわかりにくくてすいません。どう書けばいいかわからなかったので・・・)
で、何が問題だったかというと、例えばシステムで読み込むテキストファイルをこの方法で作った場合、
この余計な半角スペースのせいでエラーになったりしてしまうんですね。
#解決策
copyコマンドでどうにかする方法が無かったので代替案としてxcopyを使いました。
xcopyならほぼ同じ使い方で上記現象は発生しませんでした。
調べ方が悪いのもあるかもしれませんが、特にこれといった情報が出てこないんですよねー・・・。
もしご存知の方いれば教えて頂けると嬉しいです。