我需要针对一个包含大约3000个文档的库运行以下命令,但是已经阻止了获得正常工作的正则表达式(不是我最强的套装),或者相当于PowerShell中的/v
选项。有人可以指出我正确的方向吗?
我的命令
C:\findstr /v "<?xml version=" filename.htm > ..\testOut\filename.htm
我到目前为止使用PowerShell
(Get-Content ($srcfiles)) | Foreach-Object {$_.srcfiles -replace '<?xml version="1.0" encoding="utf-8"?>', ("")} | Set-Content ($srcfiles)
答案 0 :(得分:0)
Get-Content
返回一个行数组,而不是文件的全文作为单个字符串。
如果您正在尝试从每个文件中删除xml声明,请尝试此操作,假设$srcfiles
是完整文件路径的集合:
foreach($file in $srcfiles)
{
$content = Get-Content $file | ? { $_ -notmatch "<\?xml[^>]+>" }
$content | Set-Content $file -Force
}
基本上,循环遍历所有文件,获取每个文件的内容,忽略任何xml声明行,然后将该数据推回原始文件。我分两步执行此操作,因为PowerShell不允许您将内容写入您获取数据的同一管道中的文件。
答案 1 :(得分:0)
$path = "C:\Path\To\Documents"
$outputPath = "C:\Path\To\OutputDocuments"
Get-ChildItem $path | % {
$content = ( Get-Content -Raw $_ ) -replace '<?xml version="1.0" encoding="utf-8"?>', ''
$fileName = Join-Path $outputPath $_.Name
Set-Content -Path $fileName -Value $content
}
如果您使用的是PowerShell 2.0或更低版本,请将“Get-Content -Raw”替换为“Get-Content -ReadCount 0”。
您还需要将Get-ChildItem的输出过滤为仅返回文件而不是目录。在PowerShell 3.0或更高版本中,您可以将“-File”参数添加到Get-ChildItem。否则,试试这个:
Get-ChildItem $path | ? { $_.GetType() -eq "FileInfo" } | % {