如何创建这个非常小的Shell脚本的Windows等效物?

chhkpiq4  于 2023-10-23  发布在  Shell
关注(0)|答案(1)|浏览(130)

我试图实现以下内容,但在一个.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 "$@"

我已经得到了第一部分(我想),但不知道如何做第二部分,并没有成功地在谷歌的解决方案。

REM Add your local node_modules bin to the path for this command
SET PATH=.\node_modules\.bin;%PATH%
xyhw6mcr

xyhw6mcr1#

第一个命令行可以是:

@set "PATH=%~dp0node_modules\.bin;%PATH%"

此命令行在localPATH环境变量的开头添加了批处理文件的目录而不是 * 当前目录 * 中的node_modules中的.bin的路径。
%~dp0始终扩展到以反斜杠结尾的批处理文件目录路径。因此,%~dp0应该始终与文件夹/文件名连接在一起,而不需要像这里一样添加反斜杠。
可以使用%CD%\而不是%~dp0将 * 当前目录 * 中的node_modules中的.bin的路径添加到localPATH环境变量。但请注意,* 当前目录 * 可能总是与批处理文件目录不同,因此在这里很可能不好。
%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命令的参考。

相关问题