Windows 脚本/批处理比我想象得有用的多

2020-04-10 03:59:52 +08:00
 ungrown
虽然本质上还是弱鸡,但却比我以前所认为的要强得多。
这是最近一段时间写 cmd 脚本后的心得。

为了批量转换漫画(本子)为 webp 以减小体积,刚刚肝的脚本:
https://github.com/mo-han/mo-han-toolbox/blob/master/winscript/conv.manga2webp.cmd
https://github.com/mo-han/mo-han-toolbox/blob/master/winscript/conv.webp.smart.cmd

目录下还有些其他脚本
https://github.com/mo-han/mo-han-toolbox/tree/master/winscript

更具备应用场景的可能是这几个
https://github.com/mo-han/mo-han-toolbox/blob/master/winscript/wrap.ffprobe.cmd
https://github.com/mo-han/mo-han-toolbox/blob/master/winscript/wincmdlib.cmd
https://github.com/mo-han/mo-han-toolbox/blob/master/winscript/drawincmd.cmd
3749 次点击
所在节点    Windows
26 条回复
kokutou
2020-04-10 07:05:04 +08:00
DOS 本来就是用作针对文件的操作系统嘛。。。Windows 的 cmd 发扬光大了,扩充了不少功能。。。
现在建议转 PowerShell 。。。也挺强
cmdOptionKana
2020-04-10 07:28:18 +08:00
现在 powershell 可能是最强的 shell 了,好用到炸裂,而且跨平台,Linux 下也能用。
Davic1
2020-04-10 08:19:37 +08:00
@cmdOptionKana 喔? 有没有 powershell 功能特性介绍的页面推荐一下? 想具体了解一下优势在啥地方~
Mithril
2020-04-10 08:47:46 +08:00
@Davic1 虽然第一眼看上去写法比较奇葩罗嗦,不过因为所有命令设计的都很统一,用起来还是比较舒服的。
PowerShell 本身也是面向对象的,你可以在脚本里面直接操作传递对象,列出对象的所有属性,而不用每次都去搞字符串。
最舒服的是可以直接在 PowerShell 里面调用你.NET 写的库,和.NET 本身的各种 API 。
Davic1
2020-04-10 08:54:44 +08:00
@Mithril 哈 thx ~
Osk
2020-04-10 09:13:10 +08:00
@Mithril powershell 用起来确实 6, 管道传递对象这个设计感觉很方便...

最大的痛就是和 .Net 好像有绑定, 比如我在 Windows 10 最新版上写脚本, 有不少可用的新 commandlet, 结果在 Windows 7 上一测试啥都用不了... 然后 powershell 又不能像其它脚本语言那样把运行时 /解释器和脚本打包.
cmdOptionKana
2020-04-10 09:18:03 +08:00
@Davic1 具体我也不是很懂,最近安装了跨平台的 powershell 7, 发现它很有诚意,ls, ps 等命令都提供了,明显照顾 linux 用户,搜索命令历史的快捷键也改成了 Ctrl+R,日常的简单操作已经与 bash 无异。

另外,powershell 不仅命令可以自动补全,连参数都可以自动补全。

在脚本编程方面,由于天生面向对象并且得到微软的支持不断发展迭代,现在已经非常先进,比如连 null 操作符都有了(就是那些问号操作符 ??, ??=, ?. 之类的,方便 null 相关操作)

具体的最新特性(超强!)请看这里 https://docs.microsoft.com/zh-cn/powershell/scripting/whats-new/what-s-new-in-powershell-70?view=powershell-7

基本理念说明请看这里 https://docs.microsoft.com/zh-cn/powershell/scripting/overview?view=powershell-7
cmdOptionKana
2020-04-10 09:19:26 +08:00
还有,它开源,提供了各大 Linux 发行版的二进制文件,提供中文文档(这点也很赞)。
Mithril
2020-04-10 09:27:07 +08:00
@Osk Windows 7 带的那个是老版本的,大概是 2.0 好像。Windows 10 的好像都是 5 了。你装个新版的 PowerShell 就可以了。
或者你去试试 PowerShell Core,Github 官方的 Release 页面有 zip 的 Release 。那个解压直接能用。
Mithril
2020-04-10 09:33:09 +08:00
@cmdOptionKana PowerShell 里面有一堆的 alias,ls,dir 实际上都是 Get-ChildItem 。不过也就只是别名而已,你也不能用原生命令支持的那些参数。
itfanr
2020-04-10 10:27:12 +08:00
@cmdOptionKana 在 Linux 下用?
cmdOptionKana
2020-04-10 10:34:17 +08:00
@itfanr 只是说它支持 Linux,转不转看个人意愿,我自己也没转。
cmdOptionKana
2020-04-10 10:37:05 +08:00
@Mithril 对,不过可以看出微软还是很有诚意的,而且也算是平滑了入门过渡的难度曲线,印象分能加点。
jin7
2020-04-10 10:48:06 +08:00
cmd 比 bash 还难懂...
Jirajine
2020-04-10 10:55:28 +08:00
@cmdOptionKana 照顾 Linux 用户?
Linux 用户跑一个$cat a.jpg >b.jpg 就被它那坑爹的别名和管道搞懵了。
Osk
2020-04-10 10:56:22 +08:00
@Mithril 感谢, 原来还有这种, 不过试了一下, 我用的比较多的 commandlet 一个都没, 当然, 大部分都是和 Windows 管理本身相关的, 比如 get-Command *Net* ... 升级 Windows 7 的 Powershell 是不可能升级的...
ClericPy
2020-04-10 11:06:22 +08:00
autohotkey 够香了...
whywhywhy
2020-04-10 11:06:25 +08:00
powershell 可以写 GUI,所以。。。。
Mithril
2020-04-10 11:52:12 +08:00
@Osk PowerShell Core 默认情况下没有加载很多 Module,有不少 Net 命令都是额外 Module 里的。
而且还有个专门的 WindowsCompatibility Module,你想要 portable 的话可以试试把它的 dll 弄进去直接 import 。
当然不可能完全跟老版本的 PowerShell 一样就是了。
imn1
2020-04-10 12:15:26 +08:00
@Davic1
可以调用.net(win)/.net core(跨平台)
https://docs.microsoft.com/en-us/dotnet/api/index?view=netframework-4.7.2
https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/?view=powershell-7

LINQ
https://www.red-gate.com/simple-talk/dotnet/net-framework/high-performance-powershell-linq/

GUI(win only)
https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms?view=netframework-4.7.2
GUI 不用说了,对于补充命令行的不足,drag&drop 绝对是第一目的

三方模块
例如 https://github.com/RamblingCookieMonster/Invoke-Parallel 并发器
https://github.com/Windos/BurntToast win10 的冒泡提醒
还能载入 dll 编程,不过.net 的容易些,按照 C#手册就能写,其他的要自己摸索

其他的一些细节写法的方便,例如
PS C:\>命令 1..1024
数组参数,传入一个 1~1024 的 range 数组
好多 shell 常用命令在 ps 里面内置了 alias,如“cat file.txt”其实是“Get-Content file.txt”的 alias

bash/shell 还是需要不同的工具、软件共同构成强大,ps 是自己就很强
但使用时感觉稍微慢点,速度比不上 python 和 bash
用 ps 写爬虫挺有趣的,从抓取、提取、保存都能在 ps 完成,不过大量运行嘛……呃 🤮

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

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

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

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

© 2021 V2EX