3

私はこれをfind_java.batというバッチファイルに入れています。

@echo off
for /f "delims=" %%a in ('C:\Programming\Android\android-sdk\tools\lib\find_java.exe') do (set java_exe=%%a)

問題は、このバッチファイルを実行すると次のようになることです。

'C:\Programming\Android\android-sdk\tools\lib\find_java.exe' is not recognized as an internal or external command, operable program or batch file.

ただし、バッチファイルに次のものだけが含まれている場合:

@echo off
C:\Programming\Android\android-sdk\tools\lib\find_java.exe

コマンドは問題なく実行されます。

私はバッチファイルを書くのは初めてですが、オンラインの例を見ると、これはうまくいくはずです...

編集:これをとても遅く再訪してすみません。

私は解決策を見つけました。それは私がまだ完全に理解していない理由でComSpecと関係がありました。私のComSpecは

%SystemRoot%\system32\cmd.exe;

レジストリにアクセスして変更しました

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment\ComSpec

から

%SystemRoot%\system32\cmd.exe;

C:\Windows\system32\cmd.exe

その後、ログアウトして再度ログインすると、魔法のように機能しました。%SystemRoot%はC:\ Windowsであり、他のすべてのシステム変数はそれを使用し、

@echo off
for /f "delims=" %%a in ('"C:\Programming\Android\android-sdk\tools\lib\find_java.exe"') do (set java_exe=%%a)

完全に機能したので、正直なところわかりませんが、コマンドラインFOR/Fが私よりも理解できない可能性があります。

4

2 に答える 2

1

通常、これらの問題は、コマンドを二重引用符で囲むことによって解決されます。

@echo off
for /f "delims=" %%a in ('"C:\Programming\Android\android-sdk\tools\lib\find_java.exe"') do (set java_exe=%%a)

しかし、引用符を必要とするコマンドには何も表示されません。

なぜ機能しないのかわかりませんが、FOR/Fステートメントが新しいCMDシェルでコマンドを実行しようとしています。

次のバッチを実行して、コマンドOKが実行されるかどうかを確認してください。これは、FORステートメントが実際に実行しようとしているコマンドです。

@echo off
%comspec% /c C:\Programming\Android\android-sdk\tools\lib\find_java.exe

それがうまくいくなら、私は完全に困惑しています。失敗した場合は、その理由を理解することで、FOR/Fコマンドが失敗した理由を診断することもできます。

于 2012-06-21T22:45:52.097 に答える
0

これが役立つかどうかはわかりませんが、サンプルコードを試してみました。WinXPSP3マシンで完全に動作します。管理者権限でバッチファイルを実行してみましたか?

于 2012-06-21T21:44:49.473 に答える