找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
楼主: for_flr

[问题求助] powershell从零开始,学习笔记

[复制链接]
 楼主| 发表于 2021-12-7 10:07:23 | 显示全部楼层
小结1:
有一定批处理基础,学习powershell的语法和各命令用法肯定是没有问题的。觉得难,其实主要是两个脚本思路完全不一样了。必须牢记powershell处理对象,了解各种对象本身具有哪些属性和方法,用语法组织这些属性方法解决问题。
 楼主| 发表于 2021-12-7 10:21:25 | 显示全部楼层
小结2:
回顾一楼第一题到30楼十九题。补充更正一些东西。
产生01-20递增序列
  1. foreach($a in 101..120){($a|out-string).remove(0,1)}
  2. 101..120|%{($_|out string).remove(0,1)} #之前没了解对象,错误理解了.remove()
  3. 1..20|%{"{0:d2}" -f $_}
复制代码
范围操作符..,表示连续数字。如-1..-9生成-1到-9的数组
格式化输出字符串-f,如下
  1. "{0,15}{1,15}{2,15}" -f 1,2,3
  2. "{0,15}{1,15}{2,15}" -f "hello","boy","!"
复制代码
固定字符长度,不足的补空格。{}大括号中,逗号前的数字表示-f后面所跟参数的下标。
{}大括号中,逗号后的数字表示字符占位长度
  1. ("{0,15}{1,15}{2,15}" -f 1,2,3).length  #用这两个可以加强印象
  2. ("{0,15}{1,15}{2,15}" -f "hello","boy","!").length
复制代码
  1. "{0:d8}" -f 3 #冒号后的d表示数字的补零,8表示8位
复制代码
冒号后还可以换f表示小数,p表示百分数,x表示16进制...

10秒倒计时
  1. foreach ($i in 10..1){$i;sleep -s 1}
复制代码
Measure-command{foreach ($i in 10..1){$i;sleep -s 1}}  #用measure看了下,挺精准。

类似for /f "delims= tokens=5"切割并挑选。
  1. "abc def 123 456 apple 123 45".split(" ")[4]
  2. ("abc-123-###-电源盒子-powershell" -split "-")[2,4]
复制代码
给小诗加汉字行号
  1. foreach($n in 0..7){"一二三四五六七八"[$n]+"#"+(gc a.txt)[$n]}
复制代码
建立1-10文件夹
  1. foreach($i in 1..10){md $i}
复制代码
  1. md (1..10)  #还能这样!
复制代码
关于这种格式用法[system.io.path]::getfilename()
::静态成员运算符,[]方括号中是类名。
类名::属性名     ,类名::方法名()  
.成员运算符
$对象.属性        ,$对象.方法()

千字文
  1. ((gc a.txt) -replace (" ","")|measure-object  -char).characters
复制代码
measure-command验证效率略高于原答案
  1. ((gc a.txt) -split(" ")|?{$_ -ne ""})[-1..-250] #逆序输出并去空行
复制代码
 楼主| 发表于 2021-12-22 17:22:17 | 显示全部楼层
千字文,统计重复单字
  1. $txt=(gc qzw.txt).split()|?{$_ -ne ""}
  2. $dic=@{}
  3. foreach($w in $txt){
  4.         for($i=0;$i -le 3;$i++){
  5.                 if (!$dic.containskey($w[$i])){
  6.                 $dic[$w[$i]]=1
  7.                 } else {
  8.                 $dic[$w[$i]]+=1
  9.                 }
  10.         }
  11. }
  12. write-host "千字文中有以下重复字"
  13. $dic.getenumerator()|?{$_.value -gt 1}
  14. [console]::readkey()
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 07:49 , Processed in 0.016447 second(s), 7 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表