0

私は DOS を永遠にやったことがなく、% を前に付けるラベルの特異性を思い出すことができません。タブレットで実行されている WiFi サービスに ADB に接続するためのスクリプトを作成しようとしています (他の人にも役立つかもしれません)。

@echo off
set def=192.168.1.21
if "%1" == "" (
    echo.Please supply the IP address of the ADB server/tablet.
    set /p ip=[%def%]
    if %ip% == "" (
      set ip=%def%
    )
) else (
    set ip=%1
    "C:\Program Files\adt-bundle-windows-x86_64-20130219\sdk\platform-tools\adb" connect "%ip":5555
)

スクリプトはコマンドラインで IP アドレスを受け入れる必要がありますが、何も指定されていない場合は、オペレーターにプロンプ​​トを表示する必要があります。何も入力しない場合は、印刷された角かっこで囲まれたデフォルトが使用されます。

それを除いて、それはうまくいくようです

set ip=%def%

決して実行されません。2 番目の IF ステートメントを台無しにしたと思います。% 記号が正しい場所に表示されません!! この古い黒魔術を覚えている人はいますか?

ありがとう。

4

1 に答える 1

1

ユーザーが何も入力しなかった場合、ip をデフォルトに設定する必要はありません。SET /P は、ユーザーが何も入力せずに Enter キーを押した場合、既存の値を保持します。そのため、SET /P を発行する前に値をデフォルトに設定するだけです。

ユーザーが引数に引用符を指定し、コードでさらに引用符を追加すると、問題が発生する可能性があります。通常、使用する方が安全です"%~1"。チルダは既存の引用符をすべて取り除き、独自の引用符を追加します。これは、引数がすでに引用されているかどうかに関係なく機能します。

ELSE ステートメントで ip を設定するときは、おそらく既存の引用符を削除する必要があります。

adb への引数として ip を展開しようとすると、% がありません。あなたはいつもコマンドを実行したいと思っていると思います。現在のコードは、引数として ip が指定されている場合にのみコマンドを実行します。

コードを次のように構成します。

@echo off
setlocal
set "def=192.168.1.21"
set "ip=%~1"
if not defined ip (
  set "ip=%def%"
  echo Please supply the IP address of the ADB server/tablet.
  set /p "ip=[%def%] "
)
"C:\Program Files\adt-bundle-windows-x86_64-20130219\sdk\platform-tools\adb" connect "%ip%:5555"
于 2013-05-19T23:48:44.817 に答える