标题: 【已解决】指定路径所有文件夹里(包含子文件夹)里的xml文件删除当前行和下方代码 [打印本页]
作者: linfeng_321 时间: 2022-7-15 14:10 标题: 【已解决】指定路径所有文件夹里(包含子文件夹)里的xml文件删除当前行和下方代码
本帖最后由 linfeng_321 于 2022-7-16 10:07 编辑
需求:指定路径所有文件夹里(包含子文件夹)里的xml文件删除当前行和下方代码
文件夹
.\111
.\222
.\333
...
注释标签(删除整行和下方代码)- <!--开屏变量播放-->(删除这行)
- <VariableCommand name="111" expression="1080"/>(删除这行)
- ...(删除这行)
-
- <!--开屏变量停止-->
复制代码
操作流程:
排除文件夹“.\222”,将其他文件夹里的xml文件里标签“<!--开屏变量播放-->(删除整行包含下方代码)”。
注:排除文件夹和多个注释标签(<!--开屏变量播放-->),放在顶部变量我可以设置。
作者: zaqmlp 时间: 2022-7-15 14:42
本帖最后由 zaqmlp 于 2022-7-16 10:12 编辑
- <# :
- cls&echo off&cd /d "%~dp0"&mode con lines=5000&rem bat存为ANSI/GB2312编码
- set "current=%cd%"
- powershell -NoProfile -ExecutionPolicy bypass "Get-Content -literal '%~f0'|Out-String|Invoke-Expression"
- pause
- exit
- #>
- $current=$env:current;
-
- $exclude=@(
- "222"
- "nnn"
- );
-
- $findtag=@(
- '<!--开屏变量播放-->'
- '<!--xxxx-->'
- );
-
-
- $enc=New-Object System.Text.UTF8Encoding $False;
- $folders=@(dir -literal $current|?{($exclude -notcontains $_.Name) -and ($_ -is [System.IO.DirectoryInfo])});
- for($i=0;$i -lt $folders.length;$i++){
- $files=@(dir -literal $folders[$i].FullName -recurse|?{('.xml' -eq $_.Extension) -and ($_ -is [System.IO.FileInfo])});
- for($j=0;$j -lt $files.length;$j++){
- write-host $files[$j].FullName;
- $text=[IO.File]::ReadAllText($files[$j].FullName, $enc);
- for($k=0;$k -lt $findtag.length;$k++){
- #$reg=[regex]::Escape($findtag[$k])+'\s+?[^\r\n]+';
- $reg=[regex]::Escape($findtag[$k])+'[\s\S]*?(?=<!--)';
- $text=$text -replace $reg,'';
- }
- [IO.File]::WriteAllText($files[$j].FullName, $text, $enc);
- }
- }
复制代码
作者: flashercs 时间: 2022-7-15 15:04
本帖最后由 flashercs 于 2022-7-16 09:20 编辑
- <#*,:&cls
- @echo off
- cd /d "%~dp0"
- powershell -C "Set-Location -LiteralPath ([Environment]::CurrentDirectory);. ([ScriptBlock]::Create((Get-Content -LiteralPath \"%~f0\" -ReadCount 0 | Out-String)))"
- pause
- exit /b
- #>
- # 删除的注释标签
- $arrstr = @(
- '<!--开屏变量播放-->'
- '<!--开屏变量播放2-->'
- )
- # 文件夹排除
- $dirExclude = @(
- "222"
- )
- # xml路径
- $xmlPath = ".\*.xml"
- $dirExclude = @($dirExclude | ForEach-Object {
- "*\" + [System.Management.Automation.WildcardPattern]::Escape($_) + "\*"
- })
- function Get-Encoding {
- [CmdletBinding(DefaultParameterSetName = "PathSet")]
- param (
- [Parameter(ParameterSetName = "StreamSet", Mandatory = $true)]
- [ValidateNotNullOrEmpty()]
- [System.IO.Stream]$Stream,
- [Parameter(ParameterSetName = "PathSet", Mandatory = $true, Position = 0)]
- [ValidateNotNullOrEmpty()]
- [System.String]$Path,
- [Parameter(Mandatory = $false, Position = 1)]
- [System.UInt32]$ReadCount = 1024
- )
- $utf8BOMThrow = New-Object System.Text.UTF8Encoding -ArgumentList @($true, $true)
- $utf8NoBOMThrow = New-Object System.Text.UTF8Encoding -ArgumentList @($false, $true)
- $utf16LEBOMThrow = New-Object System.Text.UnicodeEncoding -ArgumentList @($false, $true, $true)
- $utf16LENoBOMThrow = New-Object System.Text.UnicodeEncoding -ArgumentList @($false, $false, $true)
- $utf16BEBOMThrow = New-Object System.Text.UnicodeEncoding -ArgumentList @($true, $true, $true)
- $utf16BENoBOMThrow = New-Object System.Text.UnicodeEncoding -ArgumentList @($true, $false, $true)
- # type encoding,bool bom,bool throw,Text.Encoding encoding,byte[] preamble,string strPreamble
- $arrUTF8Bom = $utf8BOMThrow.GetPreamble()
- $arrUTF16LEBom = $utf16LEBOMThrow.GetPreamble()
- $arrUTF16BEBom = $utf16BEBOMThrow.GetPreamble()
-
- if ($PSCmdlet.ParameterSetName -eq "PathSet") {
- try {
- $Stream = New-Object System.IO.FileStream -ArgumentList @($Path, [System.IO.FileMode]::Open, [System.IO.FileAccess]::Read, [System.IO.FileShare]::Read)
- } catch {
- return $null
- }
- }
- $byteBuff = New-Object byte[] -ArgumentList 3
- $readCount = $Stream.Read($byteBuff, 0, 3)
- if ($byteBuff[0] -eq $arrUTF8Bom[0] -and $byteBuff[1] -eq $arrUTF8Bom[1] -and $byteBuff[2] -eq $arrUTF8Bom[2]) {
- # utf8bom
- $return = $utf8BOMThrow
- } elseif ($byteBuff[0] -eq $arrUTF16LEBom[0] -and $byteBuff[1] -eq $arrUTF16LEBom[1]) {
- # utf16lebom
- $return = $utf16LEBOMThrow
- } elseif ($byteBuff[0] -eq $arrUTF16BEBom[0] -and $byteBuff[1] -eq $arrUTF16BEBom[1]) {
- # utf16bebom
- $return = $utf16BEBOMThrow
- } else {
- # nobom
- if ($ReadCount -gt 0) {
- $charBuff = New-Object char[] -ArgumentList $ReadCount
- }
- # utf16-nobom 都被认为是ANSI编码
- foreach ($encoding in @($utf8NoBOMThrow<# , $utf16LENoBOMThrow, $utf16BENoBOMThrow #>)) {
- try {
- $Stream.Position = 0
- $sr = New-Object System.IO.StreamReader -ArgumentList @($Stream, $encoding, $false)
- if ($ReadCount -gt 0) {
- [void]$sr.Read($charBuff, 0, $ReadCount)
- } else {
- [void]$sr.ReadToEnd()
- }
- $return = $encoding
- break
- } catch {
-
- } finally {
- if ($sr) {
- $sr.Dispose()
- }
- }
- }
- }
- if ($PSCmdlet.ParameterSetName -eq "PathSet") {
- $Stream.Dispose()
- }
- if (!$return) {
- $return = [System.Text.Encoding]::Default
- }
- return $return
- }
-
- Get-ChildItem -Path $xmlPath -Filter *.xml -Recurse | ForEach-Object {
- if (-not $_.PSIsContainer) {
- try {
- $flagExclude = $false
- foreach ($itemPattern in $dirExclude ) {
- if ($_.FullName -like $itemPattern) {
- $flagExclude = $true
- break
- }
- }
- if (-not $flagExclude) {
- Write-Host $_.FullName
- $encoding = Get-Encoding -Path $_.FullName
- # $txt = [System.IO.File]::ReadAllText($_.FullName, $encoding)
- $lines = [System.IO.File]::ReadAllLines($_.FullName, $encoding)
- $stack = 0
- [System.IO.File]::WriteAllLines($_.FullName, [string[]]@(for ($i = 0; $i -lt $lines.Count; ++$i) {
- $line = $lines[$i]
- if ($stack -eq 0) {
- $begin = $false
- foreach ($key in $arrstr) {
- if ($line.Contains($key)) {
- $begin = $true
- break
- }
- }
- if ($begin) {
- $stack = 1
- } else {
- $line
- }
- } elseif ($stack -eq 1) {
- if ($line -match '<!--.*?-->') {
- $stack = 0
- $line
- }
- }
- }), $encoding)
- }
- } finally {
-
- }
- trap {}
- }
- }
复制代码
作者: linfeng_321 时间: 2022-7-15 21:42
今天忙忘记了,明早我测试下,感谢大佬
作者: linfeng_321 时间: 2022-7-16 08:54
回复 3# flashercs
<!--开屏变量播放-->到下一个注释标签<!--之间的代码全部删除(包括<!--开屏变量播放-->)
作者: zaqmlp 时间: 2022-7-16 10:06
本帖最后由 zaqmlp 于 2022-7-16 10:10 编辑
回复 5# linfeng_321
已修改
作者: linfeng_321 时间: 2022-7-16 10:06
回复 3# flashercs
已支付,谢谢大佬
作者: linfeng_321 时间: 2022-7-16 10:07
回复 2# zaqmlp
已选择“flashercs”脚本,达到我的要求,奖励10元红包,已支付
作者: zaqmlp 时间: 2022-7-16 10:09
回复 8# linfeng_321
二楼代码有什么问题
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |