Powershell命令笔记

搜索哪些文件含有指定字符串

Get-ChildItem ..\scripts\*azz* |Select-String 571

867161.xml:301:<t id="571">[author]\033Y黑客联盟 \033B-%s\033X[/author][text colwidth='500']Not our best choice, but let's see anyway...\n\n[right]\033ZHacker Corp.\033X[/right][/text]  

.\scripts\*azz*是路径,支持通配符。

571是欲查找的字符串,是正则表达式。如果有空格,要用引号包起来。如果加选项-simplematch,则不作为正则表达式。

输出结果是文件名+行号+该行内容。

Get-ChildItem ..\scripts\*azz* |Select-String 571|select Filename

Filename  
--------  
azz.ext.nom.std.xml  
azz.gr.interv.ComIA.xml  
azz.prime.calcule.xml  
azz.prime.comm.menu.IA.general.xml  
azz.prime.comm.menu.xml  
azz.prime.commerce.ComIA.xml  
azz.prime.commerce.ComIA.xml  
azz.prime.commerce.IA.xml  
azz.prime.commerce.IA.xml  
azz.prime.commerce.IA.xml  
Azz.status.xml

如果有些文件的一行很长,上一命令的输出很长,这时可以用此命令,仅显示文件名(Filename)。也可以改成显示路径(Path)。

具体有哪些可以选择性显示,用get-property命令查看,MSDN对此的说明很难找。

Get-ChildItem ..\scripts\*azz* |Select-String 571|select Filename|Get-Unique -AsString

Filename  
--------  
azz.ext.nom.std.xml  
azz.gr.interv.ComIA.xml  
azz.prime.calcule.xml  
azz.prime.comm.menu.IA.general.xml  
azz.prime.comm.menu.xml  
azz.prime.commerce.ComIA.xml  
azz.prime.commerce.IA.xml  
Azz.status.xml  

如果有些文件里不止一次出现指定的字符串,则在上例中文件名会显示多次。

此命令则只显示不重复的文件名。

原先的返回值是对象,AsString选项要求把返回值先ToString,然后排序。(在本例中,如果不加AsString,则只会显示第一个对象。)

文件批量重命名

ls *.jpg | %{ mi -LiteralPath $_ ($_.name -replace "Help","帮助") }

%ForEach-Object的别名,大括号里面是循环体,$_是循环变量。

miMove-Item的别名。

发表评论

电子邮件地址不会被公开。

:wink: :twisted: :roll: :oops: :mrgreen: :lol: :idea: :evil: :cry: :arrow: :?: :-| :-x :-o :-P :-D :-? :) :( :!: 8-O 8)