« iPhone 6/6 PlusがWiMAX2+なのかLTEを使っているのかを調べる方法 | トップページ | ジャイロセンサーからスマホの周囲の音声を盗聴可能!? »

2014年10月12日 (日)

WindowsのBATコマンドで一階層下のファイルを取り扱うためのコマンドの書き方

会社にて、Windows上で一つ下の階層のフォルダにあるBATファイルをすべて結合して、一つ上の階層に移動するというBATファイルをつくったのですが、これが思いのほか苦労したため、備忘録代わりに書いておきます。

やりたかったことは、Linuxのコマンドなら

cat */*.bat > matome.bat

の一文で済む操作。一階層下にあるファイルを操作したいだけなんですが、Windowsのコマンドプロンプトにはこんな書式が通用しない!ということが分かり、困っておりました。

散々ググった結果、見つけた方法は"for ~ do文"を使うというもの。

例えば、1階層下にある拡張子が”.jpg”のファイルを一つ上に動かしたいときには

for /d %%n in (*) do (if exist "D:\tmp\test\%%n\*.jpg" move D:\tmp\test\%%n\*.jpg D:\tmp\test\ )

みたいなコマンドを書いたBATファイル(拡張子が~.bat)を作ってダブルクリックすればOK。

(ここでは作業フォルダに”D:\tmp\test\”を想定してます)

1kaiso01

それぞれのフォルダにJPG画像がいくつか入ってますが、ここでBATファイルをダブルクリックすると・・・

1kaiso02

JPGファイルがすべて移動されました。

この場合は移動(move)を実行してますが、これをコピーにしたければ”move”のところを”copy”に、一つ下の階層のテキストファイルをすべて一つのファイルに結合したければ、”type D:\tmp\test\%%n\*.txt >> matome.txt”のように書き換えればいけます。

Linuxなら一発でいけるコマンドにこんなに苦労するとは思いませんでしたが、これで一つまたWindowsでの自動処理が出来る環境を作りやすくなりました。

一体何をやらせたのかといえば、あるPCでフォルダとその中にファイルを入れて、そのファイルを使ってソフトを走らせるためのBATファイルをあらかじめ作っておき、これをファイルサーバー上にコピー。

別のPCの同じ作業フォルダでfor ~ 文の入ったBATファイルを叩けば、そのファイルサーバー上のそのPCのコンピューター名のフォルダーにあるそのフォルダをローカルにコピーして、その別のPCで実行してくれる・・・という事をやらせたかっただけです。

なお、ファイルサーバー上にある自身の”コンピューター名”のフォルダからフォルダごとファイルをコピーして持ってくるコマンドは

C:\Windows\System32\xcopy.exe /e /y \\(サーバー名)\(サーバー上のフォルダ)\%COMPUTERNAME%\* C:\tmp\test\

とxcopyを使えばいけます。”%COMPUTERNAME%”というところが自分のコンピューター名の入るところ。

どちらもあまり使わない技かもしれませんが、知っておくと便利なコマンドかもしれません。

Windows コマンドプロンプト ポケットリファレンス

« iPhone 6/6 PlusがWiMAX2+なのかLTEを使っているのかを調べる方法 | トップページ | ジャイロセンサーからスマホの周囲の音声を盗聴可能!? »

パソコン系」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/510034/60439684

この記事へのトラックバック一覧です: WindowsのBATコマンドで一階層下のファイルを取り扱うためのコマンドの書き方:

« iPhone 6/6 PlusがWiMAX2+なのかLTEを使っているのかを調べる方法 | トップページ | ジャイロセンサーからスマホの周囲の音声を盗聴可能!? »

当ブログ内検索

  • カスタム検索

スポンサード リンク

ブログ村

無料ブログはココログ