请问 powershell(windows server 运维时)如何串行地顺序执行一个(脚本)文件里的命令?

2020-02-13 19:39:10 +08:00
 Newyorkcity

比如

npm install
npm run build

显然,要等待 第一条语句 npm install 执行完成 才继续执行第二条

但是一个 .bat 文件,双击运行后 npm install 执行完成会导致窗口直接退出,第二条语句不执行。

如果使用

start npm install
start npm run build

则第一条命令打开一个 npm 窗口开始执行,就认为自己执行完了,然后开始执行下一条。但npm install其实还没整完。。

谢谢

2657 次点击
所在节点    问与答
14 条回复
chenbojian
2020-02-13 19:45:52 +08:00
为什么 powershell 的标题里还出现 bat,你是不是不知道什么是.ps1
hljjhb
2020-02-13 19:53:48 +08:00
powershell 大法好,摆脱 cmd 保平安
classyk
2020-02-13 19:59:24 +08:00
NPM 的问题,powershell 没怎么用过,批处理文件里用 call npm install 调用,也就是每个前面加一个 call
imn1
2020-02-13 20:00:06 +08:00
管道啊
竖线 |
自己搜搜 “powershell 管道符”
Newyorkcity
2020-02-13 20:08:24 +08:00
@chenbojian
@hljjhb
@classyk
@imn1

mvn clean package `
`-DLOG_ROOT=C:\Users\Administrator\Documents\Scuwall\backendlog` `
`-Dspring.profiles.active=prod`

请问几位知道 ps1 中如何换行么?我网上一搜都是说用 反引号。。我就这么用的
后面两行 -D 打头的要作为 mvn 命令的参数 我看网上的说法也要用反引号把它们转义
我现在用这个样子的话最后那一行还是没有被视为 mvn 命令的参数,而是报错说 powershell 没有 `-Dspring.profiles.active=prod` 这样的命令

谢谢
imn1
2020-02-13 20:20:06 +08:00
你这没有转义需求,那就不用转义啦,参数里面有特殊符号才需要转义,例如参数里面有双引号或者管道符之类
Tumblr
2020-02-13 20:23:44 +08:00
1. 你的问题描述和回复里没看到半点 PowerShell 的影子;
2. PowerShell 的换行是 grave (重音符号,即 1 前面那个);
3. PowerShell 本身就是顺序执行的脚本语言,如果启动某个程序,用 cmdlet `Start-Process`,加参数 -Wait 可以等待执行。
Newyorkcity
2020-02-13 20:24:57 +08:00
@imn1 额。。如果不转义的话报
Unknown lifecycle phase ".profiles.active=prod"
如果朋友你不是 java 开发的话。。这就相当于这条命令被这么理解:

mvn clean package .profiles.active=prod .....

哎。真的是让人头大,那么是要转义什么部分呢?
Newyorkcity
2020-02-13 20:29:15 +08:00
@Tumblr 谢谢解答。但 powershell 官网说它功能强大,所以学习起来也要更多投入,我现在不想深入这个。能麻烦您再解答一下我更新的问题么,在八楼。
CallMeReznov
2020-02-13 20:35:33 +08:00
mvn clean package `
'-DLOG_ROOT=C:\Users\Administrator\Documents\Scuwall\backendlog`
-Dspring.profiles.active=prod'
feilong
2020-02-13 22:04:35 +08:00
start 是个单独的命令,有参数设置等待的
Newyorkcity
2020-02-13 22:51:29 +08:00
@CallMeReznov 谢谢你的解答,可以再请教一下你是如何推断使用引号括住的范围的吗?

比如我接下来要

java -jar
-DLOG_ROOT=C:\Users\Administrator\Documents\Scuwall\backendlog
-Dspring.profiles.active=prod
xxx.jar

请问如何推断引号应该从那里括到那里呢? 是 引号开始 -jar .... xxx.jar 引号结束
还是 -jar 引号开始 ...... 引号结束 xxx.jar

虽然一个一个尝试过来总能试出来。。但其中的规则可以麻烦您讲一下么?
CallMeReznov
2020-02-13 23:02:05 +08:00
@Newyorkcity #11 这里引号为了转义,讲道理只要不出现特殊符号,命令行能识别,在没有特殊要求情况下带不带引号应该没区别的
你全括起来与 一个参数括起来一段本质上执行起来没区别,你之前那段之所以错误是以为你` 和''是两码事
Tumblr
2020-02-14 10:04:37 +08:00
@Newyorkcity #7 那个……可能上面有回答者在我的 block list 里了,你的这一条回复我看到的是 7 楼,8 楼是 feilong 回答的「 start 是个单独的命令,有参数设置等待的」,上面有你提到的「那么要转义什么部分呢」应该是有上下文的,所以……我不知道该回答哪个。 😂
单独说转义的话,PowerShell 里可以直接在需要转义的字符前添加`( grave )就可以了,比如:
Start-Process -FilePath '/Library/Application Support/Microsoft/MAU2.0/Microsoft AutoUpdate.app' -ArgumentList "--mode `"quiet`""

P.S 上面的参数我是随便写的,实际上这个应用没有这个启动参数。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/644372

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX