Windows 脚本/批处理比我想象得有用的多 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ungrown
V2EX    Windows

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

  •  
  •   ungrown 2020 年 4 月 10 日 4201 次点击
    这是一个创建于 2132 天前的主题,其中的信息可能已经有所发展或是发生改变。
    26 条回复    2020-04-18 13:01:44 +08:00
    kokutou
        1
    kokutou  
       2020 年 4 月 10 日 via Android
    DOS 本来就是用作针对文件的操作系统嘛。。。Windows 的 cmd 发扬光大了,扩充了不少功能。。。
    现在建议转 PowerShell 。。。也挺强
    cmdOptionKana
        2
    cmdOptionKana  
       2020 年 4 月 10 日   2
    现在 powershell 可能是最强的 shell 了,好用到炸裂,而且跨平台,Linux 下也能用。
    Davic1
        3
    Davic1  
       2020 年 4 月 10 日
    @cmdOptionKana 喔? 有没有 powershell 功能特性介绍的页面推荐一下? 想具体了解一下优势在啥地方~
    Mithril
        4
    Mithril  
       2020 年 4 月 10 日
    @Davic1 虽然第一眼看上去写法比较奇葩罗嗦,不过因为所有命令设计的都很统一,用起来还是比较舒服的。
    PowerShell 本身也是面向对象的,你可以在脚本里面直接操作传递对象,列出对象的所有属性,而不用每次都去搞字符串。
    最舒服的是可以直接在 PowerShell 里面调用你.NET 写的库,和.NET 本身的各种 API 。
    Davic1
        5
    Davic1  
       2020 年 4 月 10 日
    @Mithril 哈 thx ~
    Osk
        6
    Osk  
       2020 年 4 月 10 日
    @Mithril powershell 用起来确实 6, 管道传递对象这个设计感觉很方便...

    最大的痛就是和 .Net 好像有绑定, 比如我在 Windows 10 最新版上写脚本, 有不少可用的新 commandlet, 结果在 Windows 7 上一测试啥都用不了... 然后 powershell 又不能像其它脚本语言那样把运行时 /解释器和脚本打包.
    cmdOptionKana
        7
    cmdOptionKana  
       2020 年 4 月 10 日   1
    @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
        8
    cmdOptionKana  
       2020 年 4 月 10 日
    还有,它开源,提供了各大 Linux 发行版的二进制文件,提供中文文档(这点也很赞)。
    Mithril
        9
    Mithril  
       2020 年 4 月 10 日   1
    @Osk Windows 7 带的那个是老版本的,大概是 2.0 好像。Windows 10 的好像都是 5 了。你装个新版的 PowerShell 就可以了。
    或者你去试试 PowerShell Core,Github 官方的 Release 页面有 zip 的 Release 。那个解压直接能用。
    Mithril
        10
    Mithril  
       2020 年 4 月 10 日
    @cmdOptionKana PowerShell 里面有一堆的 alias,ls,dir 实际上都是 Get-ChildItem 。不过也就只是别名而已,你也不能用原生命令支持的那些参数。
    itfanr
        11
    itfanr  
       2020 年 4 月 10 日
    @cmdOptionKana 在 Linux 下用?
    cmdOptionKana
        12
    cmdOptionKana  
       2020 年 4 月 10 日 via iPad
    @itfanr 只是说它支持 Linux,转不转看个人意愿,我自己也没转。
    cmdOptionKana
        13
    cmdOptionKana  
       2020 年 4 月 10 日 via iPad
    @Mithril 对,不过可以看出微软还是很有诚意的,而且也算是平滑了入门过渡的难度曲线,印象分能加点。
    jin7
        14
    jin7  
       2020 年 4 月 10 日
    cmd 比 bash 还难懂...
    Jirajine
        15
    Jirajine  
       2020 年 4 月 10 日 via Android
    @cmdOptionKana 照顾 Linux 用户?
    Linux 用户跑一个$cat a.jpg >b.jpg 就被它那坑爹的别名和管道搞懵了。
    Osk
        16
    Osk  
       2020 年 4 月 10 日
    @Mithril 感谢, 原来还有这种, 不过试了一下, 我用的比较多的 commandlet 一个都没, 当然, 大部分都是和 Windows 管理本身相关的, 比如 get-Command *Net* ... 升级 Windows 7 的 Powershell 是不可能升级的...
    ClericPy
        17
    ClericPy  
       2020 年 4 月 10 日
    autohotkey 够香了...
    whywhywhy
        18
    whywhywhy  
       2020 年 4 月 10 日
    powershell 可以写 GUI,所以。。。。
    Mithril
        19
    Mithril  
       2020 年 4 月 10 日   1
    @Osk PowerShell Core 默认情况下没有加载很多 Module,有不少 Net 命令都是额外 Module 里的。
    而且还有个专门的 WindowsCompatibility Module,你想要 portable 的话可以试试把它的 dll 弄进去直接 import 。
    当然不可能完全跟老版本的 PowerShell 一样就是了。
    imn1
        20
    imn1  
       2020 年 4 月 10 日   1
    @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 完成,不过大量运行嘛……呃
    imn1
        21
    imn1  
       2020 年 4 月 10 日
    @Davic1
    补充,ps 在 win 平台,调用.net 或.net dll,运行要比原生写法快很多,例如多文件批量处理 get-item 是比较慢的

    题外
    M$有个 ChnCharInfo.dll ,用它可以反查拼音(汉字拼音)很强,暂时其他非.net 语言还没见到比它更好的例子
    ps/c#例子是有了,我想在 python 调用,但不会写,因为是.net
    ddup
        22
    ddup  
       2020 年 4 月 10 日
    PowerShell 强到没对手,而且跨平台,就是 C# 那么优美,PowerShell 咋整得 有点丑呢。
    jin7
        23
    jin7  
       2020 年 4 月 11 日
    powershell 最变态的一点就是 “”中文单 /双引号和英文单 /双引号效果一样 太无语了
    还有 有参函数调用的写法 有坑 可能未察觉的写错了
    ps1aniuge
        24
    ps1aniuge  
       2020 年 4 月 18 日
    ps 第三课:面向对象语言有啥优缺点?
    http://bbs.chinaunix.net/thread-4264062-1-1.html
    http://tieba.baidu.com/p/5913346984


    ps 第 7 课:powershell 到底有何优势,为什么要学?
    http://bbs.chinaunix.net/thread-4264776-1-1.html


    @Davic1
    ps1aniuge
        25
    ps1aniuge  
       2020 年 4 月 18 日
    @jin7 庆五一,分享 powershell 奇技淫巧,部分解决 bash 的癌症。
    shell 支持一对单引号,一对双引号。简称 2 层。多了就必须转义。我们不喜欢转义。
    但 powershell 支持用 [中文单引号] =当 [单引号] 。用 [中文双引号] =当 [双引号] 。
    所以用 bash 调用 powershell 发送命令时,可以使用 4 层单双引号。这使用了 bash 不支持中文单双引号的特性。
    这个特性支持写在 ps 脚本中,也支持在命令行中用 pwsh -c “ps 命令”。

    #问:这个脚本谁写的?有问题找谁技术支持?
    #答:QQ 群号=183173532
    #名称=powershell 交流群
    #华夏脚之峰。Everest of the powershell
    #专门教学 win,linux 通用的 ps1 脚本。不想学也可以,入群用红包求写脚本。

    例子:
    ssh [email protected] "echo 'a'"
    #上面是传统命令,下面是 ps 奇技淫巧
    ssh [email protected] "pwsh -c “echo (‘a’+'b') ” "
    ssh root@跳板机 ip "pwsh -c “ssh root@真机 ip ‘中文单引号包围的命令’ ” "

    那么,是否可以再套 bash,在套 ps 呢?自己研究吧。
    ps1aniuge
        26
    ps1aniuge  
       2020 年 4 月 18 日
    论坛把中文引号,,,,强制转换成英文了。唉。看来 py 也是解释 中文单双引号,为英文。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     966 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 19:17 PVG 03:17 LAX 11:17 JFK 14:17
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86