我在一个bat文件中有以下命令。
echo STEP12
cd HDC
git config --global url."https://".insteadOf git://
echo STEP13
cd hui-components-style
npm install --registry http://localhost:23510
cd ..
在STEP13中,在npm之后安装命令cd..
不起作用。它不会回到父HDC文件夹。我有其他命令在父文件夹中运行。我做了一些语法错误?
答案 0 :(得分:2)
npm
在Windows上是一个文件扩展名为.cmd
的Windows批处理脚本,而不是可执行文件,在这种情况下会修改当前目录,并且在退出之前不会还原它。
我建议使用而不是
cd hui-components-style
命令
pushd hui-components-style
并使用而不是
cd ..
命令
popd
有关两个命令的详细信息 - push和pop目录 - 打开命令提示符窗口并运行pushd /?
和popd /?
以显示每个命令的帮助。
使用绝对路径更好地理解的解释。
C:\Temp\HDC
。pushd hui-components-style
将C:\Temp\HDC
保存在堆栈上并设置为新的当前目录C:\Temp\HDC\hui-components-style
。npm
修改当前目录。popd
从堆栈中获取C:\Temp\HDC
并将此目录设置为当前目录,与当前目录无关。所以带有这两个修改的代码是:
echo STEP12
cd HDC
git config --global url."https://".insteadOf git://
echo STEP13
pushd hui-components-style
call npm.cmd install --registry http://localhost:23510
popd
必须使用命令call
,因为npm
是一个完整文件名为npm.cmd
的批处理文件,而不是可执行文件,即
call npm.cmd install --registry http://localhost:23510
否则当前批处理文件的命令处理在npm.cmd
上继续,并且在Windows命令永远不会处理npm
行之后当前批处理文件中的任何命令处理器。有关执行批处理文件的各种方法的详细信息,请参阅How to call a batch file that is one level up from the current directory?上的答案。另请参阅copy command in batch file is not getting executed when calling the batch file from another batch file, but is getting executed when I double click上的答案。
或者,也可以使用以下代码:
echo STEP12
cd HDC
git config --global url."https://".insteadOf git://
echo STEP13
cd hui-components-style
setlocal
call npm.cmd install --registry http://localhost:23510
endlocal
cd ..\
命令 setlocal 执行以下操作:
即使setlocal
使用4个可能选项中的1个或2个EnableExtensions
,DisableExtensions
,EnableDelayedExpansion
,DisableDelayedExpansion
,也始终执行这5个步骤另外更改命令扩展的状态和/或延迟的环境变量扩展。
现在批处理文件npm.cmd
可以更改当前工作目录,可以添加,删除和修改环境变量,可以启用/禁用命令扩展,并可以启用/禁用延迟扩展的使用。
但是,在下一个命令 endlocal 之后,对命令处理环境的所有修改都无关紧要,因为 endlocal
有关示例,请参阅
上的答案这两个命令的名称实际上是自我解释的: