2017-01-01 17 views
2

私はラベル内で実行中のバッチファイルの名前を取得するにはどうすればよいですか?

call :label 
:label 
echo %~0 
pause 

の代わりに "C:\ユーザーはデスクトップ\ BATCH.BAT \ミー\" エコー実行し、それがエコー ":ラベル"。 ":label"をエコーするのではなく、 "C:\ Users \ Me \ Desktop \ Batch.bat"をエコーし​​たいと思います。

私は、呼び出し前に%〜0を格納することに頼っていません:label。

できますか?もしそうなら、それはどうやって行えますか?

答えて

4

それはあなたが要素への参照を作成%0サブルーチン引数の修飾子のいずれかを使用している場合、このコードは

W:\test>labelTest.cmd 
:label 
W:\test\labelTest.cmd 
labelTest.cmd 

が表示されます

@echo off 
    setlocal enableextensions disabledelayedexpansion 

    call :label 
    goto :eof 

:label 
    echo %0 
    echo %~f0 
    echo %~nx0 

の作業を取得するために特別な要件はありませんファイル名/パス/ ...のうち、ラベル名の代わりにバッチファイルの使用をデータソースとして強制します。

+0

現在のコードを変更する必要がないので、これは完璧です!私はsetlocalなしであなたのコードをテストし、それは動作します。 ありがとうございます! – SirJosh3917

3
call :label "%~0" 
:label 
echo %~0 %~1 
pause 

しかし、何が私をエスケープしますか。

+0

これは変数を保存しないため、このバッチファイルのパスは%〜1でも引き続きアクセスできるため、この回答に満足しています。しかし、ユーザーが "%〜0"を指定しなかった場合、または%〜1をチェックする方法が少なくともあります:labelはまったくランダムなバッチファイルではなく、バッチファイルです。 – SirJosh3917

+0

'%0'(=バッチファイルの0番目と" hidden "引数)は常にバッチファイル自体(ファイル名などを含む)へのパスです。 'call:label"%〜0 "'これはパラメータのように関数に渡されます。その場合、 ':label'は隠された引数をゼロにします。バッチファイルのパスを取得するには、最初の実際のパラメータを取得する必要があります。ユーザーはここで何も指定する必要はありません! – geisterfurz007

+0

@ geisterfurz007私のコードは現在のところ、コードの最後にコードを追加するだけで、いくつかは%0を必要とする新しい関数がたくさんあります。 MC NDのおかげで、%0を設定する必要があるため、ユーザーのコードに負荷を加える必要はありません。 – SirJosh3917

関連する問題