[英]Read the first line of batch file from the same batch file?
我有一個批處理文件,嘗試運行第一行中指定的程序。 與Unix的shebang類似:
C:\> more foo.bat
#!C:\Python27\python.exe
%PYTHON% foo-script.py
C:\>
我想知道的是:有沒有辦法自動將%PYTHON%
設置為C:\\Python27\\python.exe
,這是在shebang( #!
)之后的腳本的第一行中指定的?
背景 :我正在嘗試這樣做,以便在包裝器腳本中顯式指定要調用的Python解釋器(因為系統上安裝了多個Python解釋器)。
假設 :您可以假設腳本已經知道它自己的文件名( foo
), %~dp0
是此腳本的目錄。 我們如何閱讀不包括shebang的第一行?
澄清 :將C:\\ PythonXY添加到%PATH%不是解決方案。 shebang行應該在用戶機器的安裝時間(原始腳本僅在構建機器上生成)中進行修改..這可能有多個相同版本的Python安裝。 只有shebang線是可修改的(這是程序的工作方式)。
首先,在窗戶上,沒有必要。 最好將Python解釋器的路徑包含在運行腳本的用戶的PATH環境變量中。 也就是說,要批量獲取第一行,您可以使用set
set /p var=<file
因為你有多個版本的解釋器,為什么不在調用腳本時使用正確的解釋器呢?
c:\python27\bin\python.exe myscript.py
編輯:
@echo off
set /p var=<test.py
call %var:~2% test.py
產量
C:\test>more test1.py
#!c:\Python26\python.exe
print "hello"
C:\test>more test.bat
@echo off
set /p var=<test1.py
call %var:~2% test1.py
C:\test>test.bat
hello
Shebangs只是Unix / Linux / BSD變種文件系統的原生,由於它們的設計和布局,文件系統知道當文件以shebang開頭時,文件系統觸發用戶的終端進程根據shebang調用shell,通常/bin/sh
。 這可以通過文件系統程序瀏覽確認這里 。
編輯:編輯了我的答案,使其在Windows環境的上下文中完全清楚。
簡而言之,這在Windows(2000向上到Windows 7)下是不可能的,因為NTFS缺乏解釋數據內容的這種能力(NTFS不關心文件中的內容),因此缺乏擁有exec
調用加載shebang腳本,只提供.EXE,.DLL,.SYS,.DRV,但對於腳本....
希望這會有所幫助,最好的問候,湯姆。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.