Powershell命令笔记
2013年3月24日搜索哪些文件含有指定字符串
Get-ChildItem ..\scripts\*azz* |Select-String 571
867161.xml:301:<t id="571">[author]3Y黑客联盟 3B-%s3X[/author][text colwidth='500']Not our best choice, but let's see anyway...\n\n[right]3ZHacker Corp.3X[/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的别名,大括号里面是循环体,$_
是循环变量。
mi
是Move-Item的别名。