繁体   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