2

私は最初のバッチファイルを書いていますが、これまでWindowsコマンドラインを使用したことがないため、いくつかの問題が発生しています。

これが私のシナリオです。このバッチファイルをいくつかのイメージで使用して、何かをインストールします。バッチファイルで、インストーラーが存在する必要があるフォルダーを確認し、フォルダーが存在しない場合は、バッチファイルでコンピューターからインストーラーを検索する必要があります。その後、上記のインストーラーを実行してほしい。

これが私が持っているものです:

ECHO.
ECHO Starting Foo installation

IF EXIST Install\Installer.cmd (CALL Install\Installer.cmd & GOTO NextPart) ELSE (GOTO SearchInstaller)

:SearchInstaller
SET the_path =
E: & CD\
DIR /S/B Installer.cmd > installer_location.txt
IF EXIST installer_location.txt (SET /P the_path =< installer_location.txt & GOTO FoundIt)
C: & CD\
DIR /S/B Installer.cmd > installer_location.txt
IF EXIST installer_location.txt (SET /P the_path =< installer_location.txt & GOTO FoundIt)
D: & CD\
DIR /S/B Installer.cmd > installer_location.txt
IF EXIST installer_location.txt (SET /P the_path =< installer_location.txt & GOTO FoundIt)
ECHO Installation file not found.

:FoundIt
ECHO Batch file found at%the_path%
CALL %the_path%
ECHO Finished installation & ECHO. 
GOTO NextPart

:NextPart
(more stuff)

問題は、DIRを使用してパスを見つけたら、パスが保存されないことだと思います。私は何日も研究してきました、そして私のグーグル検索はすべて紫色のリンクでいっぱいです。私が見つけたものはすべて私の構文が正しいと言っていますが、私は何か間違ったことをしていることを知っています。

私はECHO Program execution reached this point.いくつかの場所にを配置しようとしたので、少なくともそれがどこに到達するかはわかっています。私が見ている問題は、テキストファイルの内容をパスthe_pathに割り当てようとしている行とその行にあるので、それが機能していることがわかります。ECHO

4

1 に答える 1

3

SET /Pコマンドでは、変数名と等号の間にスペースがあります。これは、あなたが望んでいたことではなく、あなたが求めていることを正確に実行します。名前がスペースで終わる変数を設定します。余分なスペースを取り除いてください、そして私はそれがうまくいくと思います。

追加:-

ニールが指摘した問題を回避するために(良いキャッチ!)これを試してください:

DIR /S/B Installer.cmd > installer_location.txt
SET /P the_path=< installer_location.txt
if defined the_path goto :foundit

installer.cmd見つからない場合installer_location.txtは空でありthe_path、定義されていないことがわかります。特に注意したい場合は、試してみてください

if defined the_path if exist "%the_path%" goto :foundit
于 2012-06-12T23:33:41.480 に答える