呼び出しスクリプトの名前に応じて、私の2.bat
スクリプトの動作が必要です。呼び出すバットスクリプトの名前を取得する方法
シナリオ: 2.bat
は他の多くの外部スクリプトから呼び出されますが、これは変更できません。私の親指の下には2.bat
しかありません。
1.bat
:
...
call 2.bat
2.bat
:
...here place something extracting "1.bat"...
呼び出しスクリプトの名前に応じて、私の2.bat
スクリプトの動作が必要です。呼び出すバットスクリプトの名前を取得する方法
シナリオ: 2.bat
は他の多くの外部スクリプトから呼び出されますが、これは変更できません。私の親指の下には2.bat
しかありません。
1.bat
:
...
call 2.bat
2.bat
:
...here place something extracting "1.bat"...
あなたは、呼び出し元のバットを変更カントとして、それはCMDコンソールを介してトリガされた場合、その名前を取得することはほとんど不可能があるでしょう(かもしれメモリダンプが助けになるかもしれません)、ProcessIdはcmd.exe
の情報しか保持しません。あなたが得ることができます
setlocal enableDelayedExpansion
for /f "tokens=2* delims= " %%a in ("%cmdcmdline%") do (
if /i "%%~a" equ "/c" (
for %%# in (%%~b) do (
echo calling bat : %%~#
)
) else (
doskey /history >"%tmp%\cmd.history"
for /f "usebackq tokens=* delims=" %%# in ("%tmp%\cmd.history") do (
set "last_command=%%#"
)
echo probably this is the calling bat: !last_command!
del /q /f "%tmp%\cmd.history"
)
)
pause
:呼び出し側のバットは、あなたがこれを使用することができ、ダブルクリックすると
をコマンドプロンプト歴史はあなたにいくつかの情報を与えることができるが、それは信頼できないだろう(と一時ファイルにダンプが必要です)トリックのある呼び出し元のバッチの名前。
それがこの
@echo off
set caller=empty
echo This is %~0
for /L %%n in (1 1 3) do (
echo(
echo #1 before calling, n=%%n
call second %%n
)
echo Back to %~0
のようになります。そして、あなたのsecond.bat
は、[バッチ(.BAT)の呼び出し元
@echo off
setlocal DisableDelayedExpansion
set "func=%~0"
for /F "delims=\" %%X in ("%func:*\=%") do set "func=%%X"
if ":" == "%func:~0,1%" (
goto %func%
)
REM *** Get the name of the caller
(
(goto) 2>nul
setlocal DisableDelayedExpansion
call set "caller=%%~f0"
call set _caller=%%caller:*%%~f0=%%
if defined _caller (
set "callType=batch"
call "%~d0\:mainFunc\..%~pnx0" %*
) ELSE (
set "callType=cmd-line"
cmd /c "call "%~d0\:mainFunc\..%~pnx0" %*"
)
echo BACK
endlocal
)
echo NEVER REACHED
exit /b
:mainFunc
echo :mainFunc of %~nx0 arg1=%1 is called from '%caller%'/%callType%
exit /b
可能な重複を検出する(あなたがcontrollすることはできません)あなたは
first.bat
を持っていると仮定すると:現在のスクリプトではなく、最初のスクリプトの名前を取得する](http://stackoverflow.com/questions/10087812/batch-bat-get-the-name-of-the-first-script-not-the-current- 1) – geisterfurz007