5

非常に単純なバッチ ファイルを見てみましょう。

echo hi
pause

これを test.bat として保存します。次に、test.bat へのショートカットを作成します。ショートカットはバッチ ファイルを実行します。バッチ ファイルは "hi" を出力し、期待どおりにキーが押されるのを待ちます。次に、ショートカットのターゲットに引数を追加します。これで、次へのショートカットができました。

%path%\test.bat some args

ショートカットは、以前と同様にバッチ ファイルを実行します。

ここで、ショートカットを管理者として実行します。(ちなみに、これは Windows 7 上にあります。) 右クリック -> [管理者として実行] を使用するか、ショートカットのプロパティに移動して詳細セクションのボックスをオンにします。大丈夫であることを UAC に伝えると、もう一度、ショートカットが期待どおりにバッチ ファイルを実行します。

ここで、ショートカットのターゲットの引数を変更して、二重引用符を追加します。

%path%\test.bat "some args"

ここで、管理者としてショートカットを試してください。今回はうまくいきません!コマンド ウィンドウがポップアップ表示され、すぐに消えてしまい、エラーが表示されません。ショートカットに > test.log 2>&1 を追加してみましたが、この場合はログが作成されません。

管理者としてではなく、同じショートカット (二重引用符を使用) を実行してみてください。バッチファイルを正常に実行します。したがって、二重引用符で囲まれたパラメーターが原因ではなく、管理者として実行されているためではないようです。2つの奇妙な組み合わせです。

また、管理者のコマンド ウィンドウから同じコマンドを実行してみました。これにより、エラーなしで期待どおりにバッチ ファイルが実行されました。コマンド ウィンドウからショートカットを実行すると、新しいコマンド ウィンドウが生成され、フラッシュして消えてしまいました。どうやら問題は、管理者、ショートカット、および二重引用符の組み合わせによって引き起こされているようです。

私は完全に困惑しています、誰か何が起こっているのか分かりますか? 対処法もお願いします。

4

6 に答える 6

6

これで Process Monitor を実行したところ、次のようになりました。

ユーザーとして実行:

cmd /c ""C:\Users\Sunbelt\Desktop\test.bat" "いくつかの引数""

管理者として実行:

"C:\Windows\System32\cmd.exe" /C "C:\Users\Sunbelt\Desktop\test.bat" "いくつかの引数"

何らかの理由で、管理者として実行の場合、コマンド全体が引用されていません。コマンドを実行しようとしているようです:

C:\Users\Sunbelt\Desktop\test.bat" "いくつかの引数

最初のスペースが引用されているため、実際に次のコマンドを実行しようとしていると思います。

"C:\Users\Sunbelt\Desktop\test.bat some" args

また、Process Monitor ログには、「C:\Users\Sunbelt\Desktop\test.bat some」の「NO SUCH FILE」というファイル システム エントリがあります。管理者として実行すると異なる理由はわかりませんが、それが起こっているようです。

于 2010-03-23T14:40:55.147 に答える
3

これを回避するには、パスにスペースを含まない別のバット ファイルを作成し、スペースを含まないファイル名を使用して、次のようにします。

call "Long path to original bat file\Original bat file.bat"

このセカンダリ バット ファイルは、管理者として実行できます。

このセカンダリ バット ファイルへのショートカットを作成し、ショートカットの詳細オプションで管理者として実行をチェックできるようになりました。ショートカットは、スペースを含むパスに配置でき、スペースを含むファイル名を持つことができます。

于 2011-12-28T00:08:43.983 に答える
0

私の場合、1 つのファイル名をパラメーターとして渡したいだけですが、パスにスペースが含まれています。

この場合に有効な解決策を見つけました (ファイル名を切り捨てても問題ない場合)。

別のバット ファイル (input_gate.bat) を作成して、CALL.exe の構文を使用してパス内のスペースを削除します。ショートカットの名前が test.lnk で、input_gate.bat と同じルートにあると仮定します。

call %~sdp0test.lnk %~sf1

これは、完全なファイル名を短い形式で test.bat にパラメーターとして渡し、管理者権限を持ちます。

  • %~sdp0 -> 現在のパス (input_gate.bat 用) の短い形式です。
  • %~sf1​​ -> input_gate.bat に渡される最初のパラメーターです (私の場合、スペースを含む完全なファイル名)
于 2013-07-14T06:48:43.683 に答える
0

これはWindows 7でうまくいきました:

ShortcutTarget: C:\Windows\System32\cmd.exe /C myscript.bat Param1 "Param Two with spaces"
StartIn:        "C:\Path containing\my script"

管理者としてまだ試していません。myscript.bat にスペースが含まれているとうまくいかないと思います

于 2016-02-26T22:17:24.400 に答える