我正在尝试在.bat
文件中实现以下目标。设置路径后,它将在第一个参数之后执行所有参数。
# Add your local node_modules bin to the path for this command
export PATH="./node_modules/.bin:$PATH"
# execute the rest of the command
exec "$@"
我已经掌握了第一部分(我认为),但是不知道如何去做第二部分,并且没有成功地使用Google搜索解决方案。
REM Add your local node_modules bin to the path for this command
SET PATH=.\node_modules\.bin;%PATH%
第一个命令行可能是:
@set "PATH=%~dp0node_modules\.bin;%PATH%"
此命令行在批处理文件的目录的子目录PATH
中的子目录.bin
的路径的开头而不是当前目录的位置,添加到local node_modules
环境变量。
%~dp0
始终扩展到以反斜杠结尾的批处理文件目录路径。因此,%~dp0
应该始终与文件夹/文件名连接在一起,而没有附加的反斜杠,如此处所示。
可以使用%CD%\
而不是%~dp0
将当前目录中子目录.bin
中子目录node_modules
的路径添加到local PATH
环境变量。但是请注意,当前目录始终可以与批处理文件目录有所不同,因此在这里很可能不好。
%CD%
扩展为不以反斜杠结尾的目录路径字符串,除了当前目录是驱动器的根目录,在这种情况下,%CD%
扩展为驱动器号+冒号+反斜杠。因此,%CD%
的使用将需要命令行:
@if not "%CD:~-1%" == "\" (set "PATH=%CD%\node_modules\.bin;%PATH%") else set "PATH=%CD%node_modules\.bin;%PATH%"
第二个命令行可能是:
@%*
该非常短的命令行导致解释传递给该批处理文件的所有参数,但参数0除外,该命令行将由Windows命令处理器在解析后执行。另请参阅:How does the Windows Command Interpreter (CMD.EXE) parse scripts?
命令行开头的@
导致Windows命令处理器cmd.exe
处理批处理文件在解析后不输出命令行。使用命令set
和%*
的命令行在批处理文件顶部的@
的行的开头不再需要@echo off
。
@echo off
set "PATH=%~dp0node_modules\.bin;%PATH%"
%*
打开command prompt,运行call /?
,并阅读输出帮助,其中说明了如何在批处理文件中引用批处理文件参数。
另请参见SS64.com,其中有Windows CMD和Linux Shell命令的参考。