如何在 Powershell 脚本中删除子字符串

如何在 Powershell 脚本中删除子字符串

这个脚本几乎就是我所需要的:

$input_path = 'C:\Common'
$output_file = 'C:\Common\extracted.txt'
$regex = 'assets'

Get-ChildItem -Path $input_path -Filter *.txt 
| Select-String -Pattern $regex -AllMatches  
| Out-File $output_file -Force

我遇到的问题是,当我将 $inputpath 更改为“C:\Common\Data”时,输出文件会在行首添加 Data\。有人能告诉我如何在输出中不显示最后一个文件夹名称吗?

答案1

ls -Fo $input_path -Fi *.txt|Select-String -Patt $regex -All|%{$f=$_.path -split '\\';$f[-2]+'\;'+$_.filename+';'+$_.linenumber+';'+$_.line}|Out-File $output_file -Fo -width 400 -OutB 0x7FFFFFFF -EA 0
  • -OutB 0x7FFFFFFF- 文件分配缓冲区大小 - 加速创建和填充文件
  • -width 400- 文件中的线宽,默认大小为 80
  • -EA 0= ErrorAction - 跳过所有错误

  • $f=$_.path -split '\\'- 拆分完整文件路径、分隔符\并将各部分保存到数组$f

  • $f[-2]- 返回末尾数组 $f 处的第二个元素(文件目录;在此示例中为 -Data目录)
  • $_.filename- 文件名
  • $_.linenumber- 行号,搜索模式($regex 变量)
  • $_.line- 行号处的文本

  • ls -Fo $input_path -Fi *.txt<=>Get-ChildItem -Path $input_path -Filter *.txt

  • Select-String -Patt $regex -All<=>Select-String -Pattern $regex -AllMatches

相关内容