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\”を想定してます)
それぞれのフォルダにJPG画像がいくつか入ってますが、ここでBATファイルをダブルクリックすると・・・
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%”というところが自分のコンピューター名の入るところ。
どちらもあまり使わない技かもしれませんが、知っておくと便利なコマンドかもしれません。
![]() |
![]()
« iPhone 6/6 PlusがWiMAX2+なのかLTEを使っているのかを調べる方法 | トップページ | ジャイロセンサーからスマホの周囲の音声を盗聴可能!? »
「パソコン系」カテゴリの記事
- 大須に行ってきました(2026.05.04)
- BluetoothマウスとUSBケーブルを購入(2026.04.04)
- 3.5インチFDを読み込ませてみた(Mac & Win)(2026.03.21)
- シャープ X1Fを代替ハードのみで動かしてみた(2026.03.01)
- 購入から40年を迎えたシャープX1Fを起動してみた(2026.02.13)
« iPhone 6/6 PlusがWiMAX2+なのかLTEを使っているのかを調べる方法 | トップページ | ジャイロセンサーからスマホの周囲の音声を盗聴可能!? »




コメント