2012-04-26 3 views
0

**バッチファイル**コマンドラインパラメータを取り込んでバッチファイルを作成しています。しかし、バッチファイルを新しいパラメータで再度実行すると、ファイルは古いパラメータで実行されます。バッチファイルのコマンドラインパラメータを更新する

  1. 最初のラン:FILE.BAT -nameハロー400 -r 320

  2. セカンドランを-w:FILE.BAT -nameハロー-w 400

私はファイルの2回目の実行、それはまだ最初の実行を実行する、私はそれがまだ最初の実行からパラメータを考慮すると言うことを意味する。誰がなぜこれが当てはまるのか知っていますか?

ありがとうございます。

バッチファイルのコードを投稿していないのは残念です。下記の がコードです。

set filename= 
set rate= 
set hidden= 
set rate= 
:recheck 
if "%1"=="-help" goto :help 
if "%1"=="-name" goto :filename 
if "%1"=="-h"  goto :hidden 
if "%1"=="-w"  goto :weight 
if "%1"=="-r"  goto :rate 
if "%~1"==""  goto :endofcommandline 
:filename 
shift 
set filename =%1 
shift 
goto :recheck 

ファイルの他の部分については、変数「filename」を使用して他の処理を行います。私はまた、ファイルの最初と最後にsetlocalとendlocalを使用します。 私はそれぞれのif文に対応する他のラベルを持っていて、ユーザによって渡された値に異なる変数を設定します。 ある変数の値を表示しようとすると、エコーがオフになることがあります。 私が使用するすべての変数は、上記のようにファイルの先頭でクリアされます。

+0

ようこそStackOverflow。バッチファイルを表示していない場合、どのように世界でどのように問題が起こっているのかわかりますか?私たちはあなたの画面を見たり、ここからあなたの心を読むことはできません。私たちが知っていることは、あなたの質問にあなたが提供するものだけです。もしあなたが私たちに言わなければ、私たちは助けることができません。あなたの質問を編集してバッチコンテンツを提供してください。そうしないと、この質問は「本当の質問ではありません」とかなり早く閉じられるでしょう。あなたは[FAQ](http://stackoverflow.com/faq)を読むことができます。答えを得るチャンスを向上させるために、より良い質問をする方法についての情報があります。ありがとう。 :) –

+0

ところで、最初の実行では実行終了時にクリアされない環境変数が設定されるので、2番目の実行では変更されていない環境変数が継承される可能性があります。 '-r 300'、あなたが与えた例では)。しかし、バッチファイル自体を投稿した方が良いでしょう。 –

答えて

1

ここにいくつかの点があります。

"私はファイルの先頭と最後にsetlocalとendlocalも使用します。"

"私が使用するすべての変数は、上記のようにファイルの先頭でクリアされます。"

SETLOCALコマンドは明確ではない変数を行い、それが事後修正から現在の変数を保持し。これは、バッチファイルの以前の実行時に、または型付きSETコマンドを介してfilename変数が定義された場合でも、その値が削除または変更されるまで残っていることを意味します。

「Ok!」と言ったところで、「バッチファイルを2回目に実行したときにファイル名変数が変更されました。

まあ、ない...次の行:

set filename =%1 

ではなく、 "ファイル名" 変数が、 "ファイル名"(ファイル名とスペース)を変更しません。これを試してください:

set filename=No space 
echo %filename% 
set filename =Bad name with trailing space 
echo %filename % 
echo %filename% 

このタイプのエラーを回避するには、プログラムを慎重にチェックする必要があります。

関連する問題