簡體   English   中英

從同一個批處理文件中讀取批處理文件的第一行?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM