当前位置: 首页 > 面试题库 >

npm安装后更改目录命令cd ..不能在批处理文件中工作

苏建安
2023-03-14
问题内容

我在一个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中,在npminstall命令cd..不起作用之后。它不会返回到父HDC文件夹。我还有其他命令要在父文件夹中运行。我是否犯了一些语法错误?


问题答案:

npm在Windows上是Windows批处理脚本,具有文件扩展名,.cmd而不是可执行文件,在这种情况下,该脚本会修改当前目录,并且在退出前不会还原该目录。

我建议使用代替

cd hui-components-style

命令

pushd hui-components-style

并使用代替

cd ..

命令

popd

有关这两个命令(push和pop目录)的详细信息,请打开命令提示符窗口,然后运行pushd /?popd /?显示每个命令的帮助。

使用绝对路径可以更好地理解的说明。

  1. 当前目录是C:\Temp\HDC
  2. 该命令pushd hui-components-style保存C:\Temp\HDC在堆栈上并设置为新的当前目录C:\Temp\HDC\hui-components-style
  3. npm 执行修改当前目录。
  4. 该命令从堆栈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命令,并且npmWindows命令处理器将永远不会处理与行之后的当前批处理文件中的任何命令。

另外,也可以使用以下代码:

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 命令执行以下操作:

  1. 它将当前目录的路径压入堆栈。
  2. 它将命令扩展的状态压入堆栈。
  3. 它将延迟扩展的状态推入堆栈。
  4. 它将当前环境变量表的内存地址压入堆栈。
  5. 它在内存中创建当前环境变量表的副本,并使该新环境变量表处于活动状态。

这些5个步骤总是即使进行setlocal被称为具有1或的4个可能的选项2
EnableExtensionsDisableExtensionsEnableDelayedExpansionDisableDelayedExpansion
额外地 改变命令扩展和/或延迟的环境变量扩展的状态。

现在,批处理文件npm.cmd可以更改当前工作目录,可以添加,删除和修改环境变量,可以启用/禁用命令扩展,以及可以启用/禁用延迟扩展的用法。

但是在下一个命令 endlocal 之后,对命令处理环境的所有修改都无关紧要,因为 endlocal

  1. 删除当前环境表;
  2. 从堆栈中弹出先前环境表的内存地址,并使用该地址来恢复初始环境变量;
  3. 从堆栈中弹出延迟扩展的状态,并相应地禁用/启用延迟扩展;
  4. 从堆栈弹出命令扩展的状态,并相应地禁用/启用命令扩展;
  5. 从堆栈中弹出先前的当前目录路径,并将当前目录设置为此路径以还原当前目录。

这两个命令的名称实际上是不言自明的:

  • setlocal …根据当前环境设置本地命令进程环境。
  • endlocal …结束本地命令进程环境并还原以前的环境。


 类似资料:
  • 本文向大家介绍批处理命令详解之目录跳转:cd,包括了批处理命令详解之目录跳转:cd的使用技巧和注意事项,需要的朋友参考一下 当我们需要处理不同路径下的文件的时候,很可能需要切换目录,这个时候,可以考虑使用目录跳转命令cd。 例如,我们打开命令行窗口的时候,一般是这样操作的:在桌面左下角找到“开始”菜单,打开“运行”,输入“cmd”,回车。这个时候,命令行窗口默认的当前目录位于当前用户所在的路径下,

  • 我有以下bash脚本: 不知何故cd命令失败说: CD: /home/dev/src/crypto没有这样的文件或目录。我很确定该目录存在。 另一方面,如果我执行以下操作,也会失败: 说python无法打开文件home/dev/src/crypto/util。py,因为没有这样的文件。 知道为什么吗? 这是目录/文件上ll命令的输出: ls输出-llid/主/ ls的输出-lid/home/dev

  • 问题内容: 在泊坞窗中,我想这样做: 但是,因为没有cd命令,所以每次都必须传递完整路径(使XYZ / fullpath)。有什么好的解决方案吗? 问题答案: 您可以运行脚本,也可以运行更复杂的参数。这是我先前下载的Dockerfile中的示例: 由于使用了“ &&”,如果所有先前的命令都成功,它将仅到达最终的“ pip install”命令。 实际上,由于每个RUN都会创建一个新的提交和AUFS

  • 问题内容: 刚安装了新的ubuntu vm来按以下顺序测试节点安装的东西: 现在,尝试创建一个我注意到express的新应用无法在外壳中使用。 返回express:找不到命令 我像这样安装了npm 我安装这种方式 有任何想法吗? 问题答案: 您需要全局安装。 Npm 1.0默认在本地安装模块。因此bash可执行文件存在于中。您可以将该文件夹添加到该文件夹​​中,也可以只在全局安装该文件夹,以便由

  • 问题内容: 我需要从java项目中一个软件包中的一个函数中执行一个.exe文件。现在,工作目录是Java项目的根目录,但.exe文件位于项目的子目录中。这是项目的组织方式: 最初,我尝试直接通过以下方式运行.exe文件: 但是问题是外部.exe需要访问其自己目录中的某些文件,并一直认为根目录是其目录。我什至尝试使用.bat文件来解决问题,但是出现了同样的问题: .bat文件与.exe文件位于同一目

  • 问题内容: 我很难使npm命令正常工作,但是不幸的是,我对Unix的了解不足以独自解决这个问题。我所做的只是,并且出现以下错误: 当我型我得到 进一步研究此问题,我发现此堆栈溢出答案: 在zsh中安装npm后找不到命令 按照其建议,我尝试将其添加到我的.zshrc文件中。键入时仍然出现相同的错误 我可以确认这是在收益率中 我还可以确认节点已安装率 有任何想法吗?我很困惑 问题答案: 不是答案,而是