‘goto’ is not recognized as an internal or external command の解決方法

‘goto’ is not recognized as an internal or external command の解決方法

このエラーは、Windowsのコマンドプロンプト(cmd)でスクリプトを実行する際に発生する一般的な問題です。主にバッチスクリプトの構文ミスや環境設定の問題が原因となります。この記事では、このエラーが発生する条件やその解決方法について詳しく説明します。

エラーが発生する条件

  • バッチファイル内の goto コマンドの記述が正しくない場合
  • ターゲットラベルが存在しない場合
  • ファイルの拡張子が正しくない(例: .batではない)場合
  • 環境変数やパスが正しく設定されていない場合
  • スクリプトがPowerShellやその他のシェルで実行されている場合

エラー発生例

以下は、このエラーが発生する典型的なバッチスクリプトの例です。

@echo off
goto :start

echo "This will not be executed."

:start
echo "Script started"

このスクリプトでは、 goto コマンドがターゲットラベル :start にジャンプします。しかし、次のような記述ミスがあるとエラーが発生します。

// ラベルの記述ミス例
@echo off
goto start

:start
echo "Missing colon in target label"

拡張子の確認

バッチスクリプトの拡張子が正しいことを確認します。Windowsでは、拡張子が .bat または .cmd である必要があります。

// ファイル名例
correct_script.bat
incorrect_script.txt

コマンドが無効になる原因を確認

環境変数が正しく設定されていない場合、 goto コマンドが認識されないことがあります。

// 環境変数を確認
echo %PATH%

// コマンドプロンプトのデフォルトパスを追加
set PATH=C:\Windows\System32;%PATH%

ラベルの記述ミスを修正する

ターゲットラベルの前には必ずコロン(:)をつける必要があります。

// 誤った記述例
goto start

// 正しい記述例
goto :start

PowerShellでの実行を避ける

バッチスクリプトはコマンドプロンプトで実行する必要があります。PowerShellで実行するとエラーが発生する場合があります。

// コマンドプロンプトで実行する
cmd /c script.bat

// PowerShellでの誤った実行例
.\script.bat

スクリプト内の構文エラーを確認する

バッチスクリプト内に不要なスペースや誤記がないかを確認します。

// 誤った構文例
goto  :start

// 正しい構文例
goto :start

エラーメッセージのデバッグ

スクリプトの中に echo を挿入して、どの部分で問題が発生しているかを確認します。

@echo off
echo "Starting script"
goto :start

echo "This line will not execute"

:start
echo "Jump successful"

拡張機能を有効にする

コマンドプロンプトでバッチスクリプトの拡張機能が無効化されている場合、エラーが発生することがあります。

// 拡張機能を有効化する
cmd /e:on

スクリプトを再作成する

スクリプトファイルが破損している場合、新しいファイルを作成して問題を解決します。

// 新規スクリプト作成例
@echo off
goto :start

:start
echo "New script created"

まとめ

‘goto’ is not recognized as an internal or external command のエラーは、主にバッチスクリプトの構文や実行環境の問題が原因で発生します。正しい構文で記述し、環境設定を確認することで解決できます。スクリプト作成時には構文エラーや設定ミスに注意してください。