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

问题描述 投票:0回答:1

我正在尝试在.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%
shell batch-file terminal command-prompt
1个回答
0
投票

第一个命令行可能是:

@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命令的参考。

© www.soinside.com 2019 - 2024. All rights reserved.