サンプル集  >  MS-DOS  >  バッチファイルで自分を上書き
バッチファイルで自分を上書き
2018/06/28

バッチファイルで自分を上書きしたときの動きを調べます。

◆環境
OS Windows 7 Service Pack1 64bit
MS-DOS 6.1.7601

バッチファイルの途中で、自分自身を上書きするバッチファイルを作ります。

updateOwn.bat
1: 
2: 
3: 
4: 
5: 
6: 
7: 
8: 
@echo off
echo updateOwn START

xcopy /y new.bat updateOwn.bat

echo I'm update own...

pause

途中でxcopyでnew.batを自分自身(updateOwn.bat)に上書きするようにしました。 その後、「I'm update own...」と表示するようにしています。

new.bat
1: 
2: 
3: 
4: 
5: 
6: 
7: 
8: 
@echo off
echo updateOwn START

xcopy /y newBat.bat updateOwn.bat

echo I'm new Batch!!

pause

xcopyまではupdateOwn.batと同じですが最後に「I'm new Batch!!」と表示するようにしました。

updateOwn.batをエクスプローラからダブルクリックして実行してみます。

updateOwn START
C:new.bat
1 個のファイルをコピーしました
't' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
I'm new Batch!!
続行するには何かキーを押してください . . .

バッチを実行すると、そのバッチの内容がメモリに読み込まれ実行されると思っていました。 そうであれば、実行中に実行したバッチファイルを上書きしても、上書き前のバッチファイルが実行されると思っていました。 しかし、I'm new Batch!!と表示された事から、実行中に実行したバッチを上書きすると途中から上書きされた内容でう動作するという事が分かりました。。。

ちなみにxcopyで失敗すると元のバッチがそのまま最後まで動きます。

updateOwn START
ファイルが見つかりません - new.bat
0 個のファイルをコピーしました
I'm update own...
続行するには何かキーを押してください . . .

実行途中で動きが変わるとは驚きです。 自分自身が上書きされた場合、続きはどこから実行するのかどうやって判断しているのでしょうか。 行数でしょうか。

また「't' は、内部コマンド〜」というエラーも謎です。

▲ PageTop  ■ Home


Copyright (C) 2018 ymlib.com