web-dev-qa-db-ja.com

コマンドラインスクリプトの問題

私は数週間バッチファイルスクリプトに取り組んできました。これにより、作業中に実行する必要のある特定のルーチンタスクが自動化されます。しかし、私はまだ理解できていない問題に遭遇しました。

スクリプトとその他のソフトウェア(.exe)を搭載したUSBスティックを使用しています。スクリプトを管理者モードで実行して、Windows TimeServiceやWindowsUpdateサービスなどの特定のサービスにアクセスできるようにする必要があります...

管理者モードでスクリプトを実行すると、開始ディレクトリがC:\ Windows\System32であることに気付きました。

このスクリプトの間、私はスティック上にあるプログラムを実行したいと思います。ただし、このプログラムは見つかりません。スティックの正確な場所へのパスを書くことができました。ただし、スティックは別のコンピューターで使用されており、ドライブ文字が常に一致するとは限らないため、これは機能しません。

簡単に言うと、管理者モードでバッチファイル(USBデバイス上にある)を実行し、そのスクリプトでプログラム(USBデバイス上でも)を自動的に実行する方法を探しています。

前もって感謝します!デンプシー

PS:可能であれば、スクリプトですべてをテキストファイルに記録する方法を誰かが説明できますか?スクリプトには多くのコマンドが含まれていることに注意してください。すべての出力をテキストファイルに記録し、同じUSBデバイスに保存しておくと便利です。

スクリプトの先頭に次の行を追加します。

@setlocal enableextensions
@cd /d "%~dp0"

1行目は環境変数を有効にし、2行目は起動されているスクリプトの現在のディレクトリを参照する特別な変数です。

これがユーザーによる良い内訳です この回答のwilx

cd    -- This is change directory command.
/d    -- This switch makes cd change both drive and directory at once. Without it you would have to do cd %~d0 & cd %~p0.
%~dp0 -- This can be dissected further into three parts:
%0    -- This represents zeroth parameter of your batch script. It expands into the name of the batch file itself.
%~0   -- The ~ there strips double quotes (") around the expanded argument.
%dp0  -- The d and p there are modifiers of the expansion. The d forces addition of a drive letter and the p adds full path.
3
David Houde